运行
mvn clean install
时,我不断遇到Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.11.0:compile (default-compile) on project test: Fatal error compiling: invalid target release: 17
形式的错误。当我完全删除 JDK 8 安装时,它似乎工作正常,但当我重新安装它时(对于其他项目的依赖项),我开始看到此错误。
我使用 JEnv 设置全局/本地 JDK 版本:
▶ jenv versions
system
1.8.0.372-internal
17.0
17.0.7
openjdk64-1.8.0.372-internal
* oracle64-17.0.7 (set by /Users/vijay/.jenv/version)
全局指向 JDK 17:
▶ echo $JAVA_HOME
/Users/vijay/.jenv/versions/oracle64-17.0.7
▶ mvn -version
Apache Maven 3.9.2 (c9616018c7a021c1c39be70fb2843d6f5f9b8a1c)
Maven home: /usr/local/Cellar/maven/3.9.2/libexec
Java version: 1.8.0_372-internal, vendor: OpenLogic-OpenJDK, runtime: /Library/Java/JavaVirtualMachines/openlogic-openjdk-8.jdk/Contents/Home/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "mac os x", version: "13.3.1", arch: "x86_64", family: "mac"
这是我在pom.xml中设置maven的jdk版本的方法:
<properties>
<maven.compiler.target>17</maven.compiler.target>
<maven.compiler.source>17</maven.compiler.source>
</properties>
...
...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<version>1.4.1</version>
<executions>
<execution>
<id>enforce</id>
<configuration>
<rules>
...
<requireJavaVersion>
<version>17</version>
</requireJavaVersion>
...
</rules>
</configuration>
<goals>
<goal>enforce</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
如何强迫行家尊重
$JAVA_HOME
?
我尝试完全删除 JDK 8 - 这解决了问题,但是当使用 JEnv 将特定项目的本地 JDK 版本切换到 JDK 8,然后使用不同的终端窗口将该项目的全局/本地 JDK 版本设置为 17 时,maven 开始恢复到 JDK 8。
编辑1: 以下“解决方法”对我有用,但并不理想:
cd jdk-8-project
jenv local openjdk64-1.8.0.372-internal
mvn clean install
# Temporarily "uninstall" jdk 8
sudo mv /Library/Java/JavaVirtualMachines/openlogic-openjdk-8.jdk ~/Desktop/
cd jdk-17-project
jenv local 17.0.7
mvn clean install
# "Re-install" jdk 8
sudo mv ~/Desktop/openlogic-openjdk-8.jdk /Library/Java/JavaVirtualMachines/
我的 Mac 也有同样的问题。我通过以下步骤解决了它(不确定它是否适用于你)
vim ~/.mavenrc
并删除
行export JAVA_HOME=my_location_of_jdk8