maven打包如何指定jdk的版本
maven打包指定jdk的版本
問題
今天遇到個問題,項目中新寫了一個接口,其中用到了lambda表達式,本地跑是沒問題的,但提交到gitLab上,自動打包部署時卻報錯了(這是其他同事配置的)
報錯信息如下:

可以看出大概意思就是,1.5的jdk不支持lambda表達式(lambda表達式確實是1.8的新特性),后來查看了下,本地idea中習慣的把項目中jdk的環(huán)境和語言環(huán)境都設置的1.8版本,雖然打包時引的也是jdk8的包,但maven估計默認還是用的1.5的去打包的(估計是當時這個項目建立時使用的1.5的jdk),所以需要在手動設置下maven打包的jdk版本
這是同事自動化部署寫的配置,只是引了jdk1.8的包

百度了一下,還是需要在pom中加配置
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
maven打包不同jdk版本的包
對于MAVEN項目,我們存在將一個工程同樣的代碼部署到不同的環(huán)境上去的場景,且這些環(huán)境的jdk版本可能會不同,那么如何一份代碼打不同的jdk版本的包呢?
基于maven我們就可以很方便的做到這點。
1. 在項目的pom文件中加入如下配置(主要配置)
<build>
? ? ? ? <plugins>
? ? ? ? ? ? <plugin>
? ? ? ? ? ? ? ? <groupId>org.apache.maven.plugins</groupId>
? ? ? ? ? ? ? ? <artifactId>maven-compiler-plugin</artifactId>
? ? ? ? ? ? ? ? <version>3.8.0</version>
? ? ? ? ? ? ? ? <configuration>
? ? ? ? ? ? ? ? ? ? <source>${java.version}</source>
? ? ? ? ? ? ? ? ? ? <target>${java.version}</target>
? ? ? ? ? ? ? ? </configuration>
? ? ? ? ? ? </plugin>
? ? ? ? ? ? <plugin>
? ? ? ? ? ? ? ? <groupId>org.apache.maven.plugins</groupId>
? ? ? ? ? ? ? ? <artifactId>maven-jar-plugin</artifactId>
? ? ? ? ? ? ? ? <version>3.1.0</version>
? ? ? ? ? ? ? ? <configuration>
? ? ? ? ? ? ? ? ? ? <archive>
? ? ? ? ? ? ? ? ? ? ? ? <manifest>
? ? ? ? ? ? ? ? ? ? ? ? ? ? <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
? ? ? ? ? ? ? ? ? ? ? ? </manifest>
? ? ? ? ? ? ? ? ? ? </archive>
? ? ? ? ? ? ? ? </configuration>
? ? ? ? ? ? </plugin>
? ? ? ? </plugins> ? ?
? ? </build>
? ? <profiles>
? ? ? ? <profile>
? ? ? ? ? ? <id>default</id>
? ? ? ? ? ? <activation>
? ? ? ? ? ? ? ? <activeByDefault>true</activeByDefault> ? ? <!--默認激活該profile-->
? ? ? ? ? ? </activation>
? ? ? ? ? ? <properties>
? ? ? ? ? ? ? ? <java.version>1.8</java.version> ? ? ? ? ? ?<默認用1.8版本>
? ? ? ? ? ? </properties>
? ? ? ? </profile>
? ? ? ? <profile>
? ? ? ? ? ? <id>jdk17</id>
? ? ? ? ? ? <properties>
? ? ? ? ? ? ? ? <java.version>1.7</java.version> ? ? ? ? ? ?<該配置用1.7版本>
? ? ? ? ? ? </properties>
? ? ? ? ? ? <build>
? ? ? ? ? ? ? ? <plugins>
? ? ? ? ? ? ? ? ? ? <plugin>
? ? ? ? ? ? ? ? ? ? ? ? <artifactId>maven-jar-plugin</artifactId>
? ? ? ? ? ? ? ? ? ? ? ? <executions>
? ? ? ? ? ? ? ? ? ? ? ? ? ? <execution>
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <phase>package</phase>
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <goals>
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <goal>jar</goal>
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? </goals>
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <configuration>
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <classifier>jdk17</classifier>
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? </configuration>
? ? ? ? ? ? ? ? ? ? ? ? ? ? </execution>
? ? ? ? ? ? ? ? ? ? ? ? </executions>
? ? ? ? ? ? ? ? ? ? </plugin>
? ? ? ? ? ? ? ? </plugins>
? ? ? ? ? ? </build>
? ? ? ? </profile>
? ? </profiles>2. 用mvn命令構建項目
mvn -P jdk17 clean? mvn -P jdk17 install #安裝的時候會出現2個包,1.8版本的與1.7版本的都生成了,如:blog-1.0.2.jar、blog-1.0.2-jdk17.jar
如果需要發(fā)布項目到服務器
mvn -P jdk17 -P <depoly配置ID> depoly
3. 項目中引用
<!-- 引用1.8編譯版本 --> <dependency> ? <groupId>org.test</groupId> ? <artifactId>blog</artifactId> ? <version>0.1</version> </dependency> ? <!-- 引用1.7編譯版本 --> <dependency> ? <groupId>org.test</groupId> ? <artifactId>blog</artifactId> ? <version>0.1</version> ? <classifier>jdk17</classifier> </dependency>
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
SpringSecurity授權機制的實現(AccessDecisionManager與投票決策)
本文主要介紹了SpringSecurity授權機制的實現,其核心是AccessDecisionManager和投票系統(tǒng),下面就來介紹一下,感興趣的可以了解一下2025-04-04
詳解Java中synchronized關鍵字的死鎖和內存占用問題
Java的synchronized關鍵字用來進行線程同步操作,然而這在使用中經常會遇到一些問題,這里我們就來詳解Java中synchronized關鍵字的死鎖和內存占用問題:2016-06-06

