nim*_*o23 13 maven maven-compiler-plugin
我有两个关于maven.compiler.release-tag 的问题
我想更换
<properties>
<maven.compiler.source>12</maven.compiler.source>
<maven.compiler.target>12</maven.compiler.target>
</properties>
Run Code Online (Sandbox Code Playgroud)
到
<properties>
<maven.compiler.release>12</maven.compiler.release>
</properties>
Run Code Online (Sandbox Code Playgroud)
如果我使用<maven.compiler.release>-property,是否还必须在插件中设置发布标签?
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<!-- do I need that ? -->
<release>12</release>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
根据https://www.baeldung.com/maven-java-version,它被设置为两者。
如果我使用maven.compiler.release而不是maven.compiler.sourceand maven.compiler.target,那么-bootclasspath也会被设置并且会进行交叉编译。这是什么意思?使用 set 的编译文件大小-bootclasspath会更大还是编译需要更多时间?
Gar*_*son 22
另一个答案中的“简单建议”无法正常工作,因为不幸的是情况并不简单。编译器选项的含义略有不同。在maven.compiler.source和maven.compiler.target选项分别指的是源代码格式,生成的类文件的格式。但是他们没有像maven.compiler.release那样考虑 API 的变化。
因此,如果您盲目地使用<maven.compiler.source>8</maven.compiler.source>and <maven.compiler.target>8</maven.compiler.target>,例如,如果您使用 Java 11 构建,则生成的类文件将支持 Java 8,但 API 可能仍依赖于 Java 11 更改并在 Java 8 上运行时中断。请参阅javac 11 链接方法如何被覆盖在具有 Java 8 目标的更高版本中?更多讨论。
如果您想指定 Java 8 但在 Java 9+ 上构建,则解决方案并不那么简单。您需要使用 Java 8 支持的编译器选项指定源和目标:
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
Run Code Online (Sandbox Code Playgroud)
然后,您需要在<profiles>仅在 Java 9+ 中激活的部分中设置单独的配置文件以打开该maven.compiler.release选项:
<profile>
<id>java-8-api</id>
<activation>
<jdk>[9,)</jdk>
</activation>
<properties>
<maven.compiler.release>8</maven.compiler.release>
</properties>
</profile>
Run Code Online (Sandbox Code Playgroud)
这样,如果您在 Java 9+ 上构建,maven.compiler.release将生效并限制 API 与 Java 8 兼容。如果您在 Java 8 上构建,其他两个选项会将源代码和类文件格式设置为 Java 8,并且根据定义,API 将与 Java 8 兼容。
对于所有相关人员来说,更好的选择当然是尽快迁移到 Java 11。
简单的属性<maven.compiler.release>12</maven.compiler.release>就足够了。而且您也不需要为 maven-compiler-plugin 设置配置。发布标记的配置会自动选取。引导类路径部分是通过使用该--release选项自动完成的。文件的大小与此无关...
如此简单的建议将release部分用于 JDK9+ 否则源/目标...
| 归档时间: |
|
| 查看次数: |
3728 次 |
| 最近记录: |