JDK11项目编译打包JDK8版本二方包的方法
项目升级JDK11后,难免会给外部系统提供二方包以支持业务。如果按照正常的编译是可以正常打包的,但是如果此时将二方包给第三方使用JDK8的业务系统使用,编译是会报错的,这是因为我们的二方包打包出来的字节码是JDK11版本的,而JDK8的编译不会向上兼容,低版本的jre运行高版本的class文件是就会抱这个错。我们不能要求其他项目和我们一起升级到JDK11,所以要打出一个能兼容JDK8版本的二方包。
如何兼容?
利用maven-compiler-plugin的编译机制。
项目主POM文件中指定项目JDK版本为11:
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<java.version>11</java.version>
</properties>
二方包或者要对外发布的模块中,指定JDK版本为8:
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
二方包的POM文件中添加maven-compiler-plugin
,指定用JDK8来覆盖项目默认的JDK11配置:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>${maven.compiler.source}</source>
<target>${maven.compiler.target}</target>
</configuration>
</plugin>
</plugins>
</build>
这样,在编译后,二方包的字节码版本就是JDK8的了