gpt4 book ai didi

java - 如何在 Maven 中使用给定的 JDK 强制编译

转载 作者:行者123 更新时间:2023-12-04 00:56:03 25 4
gpt4 key购买 nike

我正在使用不同 Java 版本的应用程序环境中工作:7、8 和更高版本。
开发人员因此安装了几个 JDK,每个 Maven pom.xml 确实具有正确的 <source><target>标签。但是,有时开发人员会无意中使用更高版本的 JDK 进行编译。因此它们可能包含一个 Java 8 类,如 java.time.LocalDate在将编译的 Java 7 中,因为它能够在编译时解析导入。但是,当应用程序稍后移动到在 JRE 7 上运行时,它将失败,因为它无法找到 Java 8 类。
可以在 pom.xml 中创建配置文件,例如:

<profile>
<id>compiler</id>
<properties>
<JAVA_1_4_HOME>C:\Program Files\Java\j2sdk1.4.2_09</JAVA_1_4_HOME>
</properties>
</profile>

但是,JDK 的位置因开发人员而异,我想要一个对每个人都通用的 pom.xml。

所以问题是, 如何强制 Maven 使用给定的 JDK 版本? 不仅是 <source><target>但是 JDK 本身并以一种通用的方式不依赖于任何给定的计算机。

最佳答案

最初我认为将 maven-compiler-plugin 的源/目标设置为 1.7足以使编译失败,但如果您安装了 JDK 8,则编译成功(奇怪!)。

你真正需要的是maven-enforcer-plugin .看下面的配置,我已经把它运行在 validate阶段,就在 compile 之前:

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<version>3.0.0-M3</version>
<executions>
<execution>
<id>default-cli</id>
<phase>validate</phase>
<goals>
<goal>enforce</goal>
</goals>
<configuration>
<rules>
<requireJavaVersion>
<version>[1.7,1.8)</version>
</requireJavaVersion>
</rules>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>

输出:
[INFO] --- maven-enforcer-plugin:3.0.0-M3:enforce (default-cli) @ compiler-demo ---
[WARNING] Rule 0: org.apache.maven.plugins.enforcer.RequireJavaVersion failed with message:
Detected JDK Version: 1.8.0-152 is not in the allowed range [1.7,1.8).

您甚至可以设置自定义消息以使您的同事更清楚,例如
<rules>
<requireJavaVersion>
<version>[1.7,1.8)</version>
<message>Project requires JDK 7</message>
</requireJavaVersion>
</rules>

输出:
[INFO] --- maven-enforcer-plugin:3.0.0-M3:enforce (default-cli) @ compiler-demo ---
[WARNING] Rule 0: org.apache.maven.plugins.enforcer.RequireJavaVersion failed with message:
Project requires JDK 7

只是为了探索插件的功能,我试图看看它是否支持多个版本范围。它确实(使用 JDK 11 运行以进行尝试):

<requireJavaVersion>
<version>[1.7,1.8),[9,10)</version>
</requireJavaVersion>

输出:
[INFO] --- maven-enforcer-plugin:3.0.0-M3:enforce (default-cli) @ compiler-demo ---
[WARNING] Rule 0: org.apache.maven.plugins.enforcer.RequireJavaVersion failed with message:
Detected JDK Version: 11.0.1 is not in the allowed range [1.7,1.8),[9,10).

关于java - 如何在 Maven 中使用给定的 JDK 强制编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62465338/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com