JDK11项目编译打包JDK8版本二方包的方法

JDK11项目编译打包JDK8版本二方包的方法

马草原 938 2023-06-15

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的了