maven打包如何指定jdk的版本
maven打包指定jdk的版本
問(wèn)題
今天遇到個(gè)問(wèn)題,項(xiàng)目中新寫(xiě)了一個(gè)接口,其中用到了lambda表達(dá)式,本地跑是沒(méi)問(wèn)題的,但提交到gitLab上,自動(dòng)打包部署時(shí)卻報(bào)錯(cuò)了(這是其他同事配置的)
報(bào)錯(cuò)信息如下:

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

百度了一下,還是需要在pom中加配置
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
maven打包不同jdk版本的包
對(duì)于MAVEN項(xiàng)目,我們存在將一個(gè)工程同樣的代碼部署到不同的環(huán)境上去的場(chǎng)景,且這些環(huán)境的jdk版本可能會(huì)不同,那么如何一份代碼打不同的jdk版本的包呢?
基于maven我們就可以很方便的做到這點(diǎn)。
1. 在項(xiàng)目的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)建項(xiàng)目
mvn -P jdk17 clean? mvn -P jdk17 install #安裝的時(shí)候會(huì)出現(xiàn)2個(gè)包,1.8版本的與1.7版本的都生成了,如:blog-1.0.2.jar、blog-1.0.2-jdk17.jar
如果需要發(fā)布項(xiàng)目到服務(wù)器
mvn -P jdk17 -P <depoly配置ID> depoly
3. 項(xiàng)目中引用
<!-- 引用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é)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Mybatis 中的sql批量修改方法實(shí)現(xiàn)
在項(xiàng)目中遇到需要批量更新的功能,原本想的是在Java中用循環(huán)訪問(wèn)數(shù)據(jù)庫(kù)去更新,但是心里總覺(jué)得這樣做會(huì)不會(huì)太頻繁了,太耗費(fèi)資源了,效率也很低,查了下mybatis的批量操作,原來(lái)確實(shí)有<foreach>標(biāo)簽可以做到,下面通過(guò)本文給大家介紹下2017-01-01
SpringSecurity授權(quán)機(jī)制的實(shí)現(xiàn)(AccessDecisionManager與投票決策)
本文主要介紹了SpringSecurity授權(quán)機(jī)制的實(shí)現(xiàn),其核心是AccessDecisionManager和投票系統(tǒng),下面就來(lái)介紹一下,感興趣的可以了解一下2025-04-04
mybatis使用pagehelper插件過(guò)程詳解
這篇文章主要介紹了mybatis使用pagehelper插件過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12
Java實(shí)現(xiàn)AWT四大事件的詳細(xì)過(guò)程
AWT的事件處理是一種委派式事件處理方式:普通組件(事件源)將整個(gè)事件處理委托給特定的對(duì)象(事件監(jiān)聽(tīng)器);當(dāng)該事件源發(fā)生指定的事件時(shí),就通知所委托的事件監(jiān)聽(tīng)器,由事件監(jiān)聽(tīng)器來(lái)處理這個(gè)事件2022-04-04
詳解Java中synchronized關(guān)鍵字的死鎖和內(nèi)存占用問(wèn)題
Java的synchronized關(guān)鍵字用來(lái)進(jìn)行線程同步操作,然而這在使用中經(jīng)常會(huì)遇到一些問(wèn)題,這里我們就來(lái)詳解Java中synchronized關(guān)鍵字的死鎖和內(nèi)存占用問(wèn)題:2016-06-06

