[英]Create Java 8 and Java 11 build for single API
我们正在努力将我们的 API 从 Java 8 升级到 Java 11。
但是,我们需要同时支持 Java 8 和 Java 11,因为所有客户端还没有准备好迁移到 Java 11。
如果我们可以使用 Java 8 和 Java 11 创建 maven 构建而不复制我们的存储库并且每次在为 Java 8 和 Java 11 创建构建之前都没有对 pom.xml 进行任何更改,是否有可能?
生成的工件应该有不同的名称来区分 Java 8 和 Java 11 版本,例如 xyz-jdk8-0.0.1.jar 和 xyz-jdk11-.0.1.jar
TL;博士
您不需要它,只需构建到 Java 8 并快乐!
求解
您可以为此使用 Maven 构建配置文件: https ://maven.apache.org/guides/introduction/introduction-to-profiles.html
1.将您的属性设置为 Java 11:
<properties>
<maven.compiler.target>11</maven.compiler.target>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.release>11</maven.compiler.release>
</properties>
2.设置您的最终姓名:
<build>
<finalName>${project.artifactId}-jdk11-${project.version}</finalName>
</build>
3.添加个人资料:
<profile>
<id>jdk-8</id>
<properties>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.release>1.8</maven.compiler.release>
</properties>
<build>
<finalName>${project.artifactId}-jdk8-${project.version}</finalName>
</build>
</profile>
4.构建:
您将需要运行 2 个构建,一个正常构建,另一个激活 JDK 8 配置文件:
$ mvn ...
$ mvn ... -P jdk-8
注意事项:
你应该:
maven.compiler.source
和maven.compiler.target
。JAVA_HOME=<<JAVA_8_HOME_FOLDER>>
。mvn clean install
从 Java 8 构建。JAVA_HOME=<<JAVA_11_HOME_FOLDER>>
。mvn clean install
从 Java 11 构建。我找到了一种方法,它有点位于 Java 8 和 Java 11 的中间。上述解决方案的主要问题发生在您拥有(或想要定义)一个无法使用的module-info.java
的情况下在 Java 8 中解析。
我开始考虑使用<classifier>
的解决方案,同样是 Claudio Weiler 上面的答案,但不想打扰两个单独的构建(甚至两个单独的分支,因为我想管理模块信息)。
我还注意到一些库,如 JAXB API 或激活 API ( jakarta.xml.bind:jakarta.xml.bind-api:2.3.3
) 在 Java 11 中使用时会显示module-info
,但与 Java 兼容8 😮。
深入了解如何构建com.sun.activiation:jakarta.activation
库的详细信息,我找到了以下解决方案:
module-info.java
因此,您需要在 pom.xml 的<build>
部分添加以下代码段:
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<executions>
<execution>
<id>default-compile</id>
<configuration>
<source>1.8</source>
<target>1.8</target>
<excludes>
<exclude>module-info.java</exclude>
</excludes>
</configuration>
</execution>
<execution>
<id>module-info-compile</id>
<goals>
<goal>compile</goal>
</goals>
<configuration>
<release>11</release>
<includes>
<include>module-info.java</include>
</includes>
</configuration>
</execution>
<execution>
<id>default-testCompile</id>
<configuration>
<release>11</release>
</configuration>
</execution>
</executions>
</plugin>
我希望这会有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.