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

可以看出大概意思就是,1.5的jdk不支持lambda表達(dá)式(lambda表達(dá)式確實是1.8的新特性),后來查看了下,本地idea中習(xí)慣的把項目中jdk的環(huán)境和語言環(huán)境都設(shè)置的1.8版本,雖然打包時引的也是jdk8的包,但maven估計默認(rèn)還是用的1.5的去打包的(估計是當(dāng)時這個項目建立時使用的1.5的jdk),所以需要在手動設(shè)置下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> ? ? <!--默認(rèn)激活該profile-->
? ? ? ? ? ? </activation>
? ? ? ? ? ? <properties>
? ? ? ? ? ? ? ? <java.version>1.8</java.version> ? ? ? ? ? ?<默認(rèn)用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命令構(gòu)建項目
mvn -P jdk17 clean? mvn -P jdk17 install #安裝的時候會出現(xiàn)2個包,1.8版本的與1.7版本的都生成了,如:blog-1.0.2.jar、blog-1.0.2-jdk17.jar
如果需要發(fā)布項目到服務(wù)器
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>
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java兩種動態(tài)代理JDK動態(tài)代理和CGLIB動態(tài)代理詳解
這篇文章主要介紹了Java兩種動態(tài)代理JDK動態(tài)代理和CGLIB動態(tài)代理詳解,代理模式是23種設(shè)計模式的一種,他是指一個對象A通過持有另一個對象B,可以具有B同樣的行為的模式,為了對外開放協(xié)議,B往往實現(xiàn)了一個接口,A也會去實現(xiàn)接口,需要的朋友可以參考下2023-11-11
Mybatis-Spring連接mysql 8.0配置步驟出錯的解決方法
這篇文章主要為大家詳細(xì)介紹了Mybatis-Spring連接mysql 8.0配置步驟出錯的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-06-06
SpringCloud中的Ribbon負(fù)載均衡器詳細(xì)解析
這篇文章主要介紹了SpringCloud中的Ribbon負(fù)載均衡器詳細(xì)解析,Ribbon 是一個基于 HTTP 和 TCP 的客戶端負(fù)載均衡工具,它基于 Netflix Ribbon 實現(xiàn),通過封裝可以讓我們輕松地將面向服務(wù)的 REST 模版請求自動轉(zhuǎn)換成客戶端負(fù)載均衡的服務(wù)調(diào)用,需要的朋友可以參考下2024-01-01
java實現(xiàn)小型局域網(wǎng)群聊功能(C/S模式)
這篇文章主要介紹了java利用TCP協(xié)議實現(xiàn)小型局域網(wǎng)群聊功能(C/S模式) ,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-08-08

