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)文章
Java兩種動(dòng)態(tài)代理JDK動(dòng)態(tài)代理和CGLIB動(dòng)態(tài)代理詳解
這篇文章主要介紹了Java兩種動(dòng)態(tài)代理JDK動(dòng)態(tài)代理和CGLIB動(dòng)態(tài)代理詳解,代理模式是23種設(shè)計(jì)模式的一種,他是指一個(gè)對(duì)象A通過(guò)持有另一個(gè)對(duì)象B,可以具有B同樣的行為的模式,為了對(duì)外開(kāi)放協(xié)議,B往往實(shí)現(xiàn)了一個(gè)接口,A也會(huì)去實(shí)現(xiàn)接口,需要的朋友可以參考下2023-11-11Mybatis-Spring連接mysql 8.0配置步驟出錯(cuò)的解決方法
這篇文章主要為大家詳細(xì)介紹了Mybatis-Spring連接mysql 8.0配置步驟出錯(cuò)的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-06-06SpringCloud中的Ribbon負(fù)載均衡器詳細(xì)解析
這篇文章主要介紹了SpringCloud中的Ribbon負(fù)載均衡器詳細(xì)解析,Ribbon 是一個(gè)基于 HTTP 和 TCP 的客戶端負(fù)載均衡工具,它基于 Netflix Ribbon 實(shí)現(xiàn),通過(guò)封裝可以讓我們輕松地將面向服務(wù)的 REST 模版請(qǐng)求自動(dòng)轉(zhuǎn)換成客戶端負(fù)載均衡的服務(wù)調(diào)用,需要的朋友可以參考下2024-01-01Java中字節(jié)流和字符流的理解(超精簡(jiǎn)!)
Java通過(guò)稱為流的抽象來(lái)執(zhí)行I/O操作,下面這篇文章主要給大家介紹了關(guān)于Java中字節(jié)流和字符流理解,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-07-07java實(shí)現(xiàn)小型局域網(wǎng)群聊功能(C/S模式)
這篇文章主要介紹了java利用TCP協(xié)議實(shí)現(xiàn)小型局域網(wǎng)群聊功能(C/S模式) ,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-08-08解決import包時(shí)報(bào) Java 程序包不存在的問(wèn)題
你是否也有過(guò)在import包時(shí)idea報(bào)錯(cuò)說(shuō)這個(gè)包不存在,可是這個(gè)包我們看得到確實(shí)存在的情況,不要慌,今天這篇文章帶你徹底告別這個(gè)問(wèn)題2021-10-10