[英]Configure maven-compiler-plugin so it works both with JDK-8 and JDK-12 (in Spring Boot project)
是否有可能配置maven-compiler-plugin
所以它的工作原理都與JDK 8和JDK 12? 我不確定它是否相關,但它是一個 Spring Boot 項目。
1.配置
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<release>8</release>
</configuration>
</plugin>
可在 JDK-12 下編譯,但在 JDK-8 下失敗:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.0:compile (default-compile) on project xxxx:
Fatal error compiling: invalid flag: --release
2.配置
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
缺少<release>8</release>
參數在 JDK-8 下可編譯,但在 JDK-12 下失敗:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.0:compile (default-compile) on project xxxx:
Fatal error compiling: CompilerException: NullPointerException
我發現所有可能的互聯網資源都建議使用<release>8</release>
參數來避免 JDK-12 下的錯誤,但這會禁用 JDK-8 下的可編譯性。
我們的源代碼和目標兼容性是 Java 8,我們需要在使用 JDK-12 的開發人員機器上使用舊的普通mvn clean install
(不提供配置文件!)構建代碼,但也在 Jenkins 上構建代碼,我們仍然有保留 JDK-8,我們也有一些保守的開發人員:)
首先,您應該像這樣在 pluginManagement 中定義 maven-compiler-plugin:
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<...>
...
此外,使用自動激活的配置文件,如下所示:
<profiles>
<profile>
<id>jkd-12-compile</id>
<activation>
<jdk>12</jdk>
</activation>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<release>8</release>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
</profile>
<profile>
<id>jdk-8-compile</id>
<activation>
<jdk>[,8]</jdk>
</activation>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>8</source>
<target>8</target>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
</profile>
</profiles>
通常不需要mvn clean install
。 你通常只需要mvn clean verify
...
一個更簡單的解決方案依賴於使用屬性而不是顯式配置條目。 它不會抱怨任何它不支持的東西。
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<profiles>
<profile>
<id>jdk9+</id>
<activation>
<jdk>[9,)</jdk>
</activation>
<properties>
<maven.compiler.release>8</maven.compiler.release>
</properties>
</profile>
</profiles>
享受!
您可以使用Maven配置文件並根據jdk激活它們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.