对于MAVEN项目,如果我们升级jdk版本但有些业务场景又不能升级,这个时候就需要根据不同的环境生成不同版本的jar包。
网上很多都是通过profile指定多个版本的jdk,利用classifier引用相应版本的jar,通过maven命令一步生成两个jar,一步生成的方式jar我们反编译编译后发现版本都是一样的。
这里我提供一种两部执行生成的方式。
1.配置settings.xml
settings文件,配置我们需要的jdk版本,这里我默认指定jdk18。
<profile>
<id>jdk18</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
<profile>
<id>jdk17</id>
<properties>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
<maven.compiler.compilerVersion>1.7</maven.compiler.compilerVersion>
</properties>
</profile>
2.配置pom
配置对应服务的pom文件,新增如下配置
<properties>
<jdk>1.8</jdk>
<name></name>
</properties>
<build>
<plugins>
<!--生成指定版本jar-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${jdk}</source>
<target>${jdk}</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<executions>
<execution>
<id>default-jar</id>
<phase>package</phase>
<configuration>
<classifier>${name}</classifier>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
3.执行maven命令
我们分别执行命令:
clean install deploy
该命令会生成基于jdk18编译的jar,并上传到私库。
clean compiler:compile -D jdk=1.7 -D name=jdk17 install
该命令会生成基于jdk17编译的jar,并上传到私库。
4.验证生成的jar
到nexus私库下载我们的jar通过javap命令反编译查看生成的两个jdk版本的jar是否符合我们要求。
javap -verbose AaAccountlevelMasBean.class | findstr "major"
输出如下:
major version: 52
major version: 51
stanford parser和jdk版本对应关系
J2SE 8 = 52,J2SE 7 = 51,J2SE 6.0 = 50,J2SE 5.0 = 49,JDK 1.4 = 48,JDK 1.3 = 47,
JDK 1.2 = 46,JDK 1.1 = 45