[英]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.