maven打包如何指定jdk的版本
作者:我不想名字重复
这篇文章主要介绍了maven打包如何指定jdk的版本问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
maven打包指定jdk的版本
问题
今天遇到个问题,项目中新写了一个接口,其中用到了lambda表达式,本地跑是没问题的,但提交到gitLab上,自动打包部署时却报错了(这是其他同事配置的)
报错信息如下:
可以看出大概意思就是,1.5的jdk不支持lambda表达式(lambda表达式确实是1.8的新特性),后来查看了下,本地idea中习惯的把项目中jdk的环境和语言环境都设置的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项目,我们存在将一个工程同样的代码部署到不同的环境上去的场景,且这些环境的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
如果需要发布项目到服务器
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>
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。