我正在尝试在centOS 8上构建maven项目。我希望maven使用Java版本15。当我运行
mvn package
时,我收到以下错误:
Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile
(default-compile) on project systembrett-backend: Fatal error compiling: invalid target release: 15 -> [Help 1]
所以我怀疑maven使用了错误的Java版本,因为当我对调试日志执行
mvn package -X
时,它以:开头
Apache Maven 3.5.4 (Red Hat 3.5.4-5)
Maven home: /usr/share/maven
Java version: 1.8.0_275, vendor: Red Hat, Inc., runtime: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.275.b01-1.el8_3.x86_64/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "4.18.0-240.1.1.el8_3.x86_64", arch: "amd64", family: "unix"
所以看起来,maven 使用的是 Java 版本 1.8。 但是
mvn -version
说:
Apache Maven 3.5.4 (Red Hat 3.5.4-5)
Maven home: /usr/share/maven
Java version: 15.0.2, vendor: AdoptOpenJDK, runtime: /opt/jdk-15.0.2+7
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "4.18.0-240.1.1.el8_3.x86_64", arch: "amd64", family: "unix"
JAVA_HOME
是 /opt/jdk-15.0.2+7
,PATH
是 /opt/jdk-15.0.2+7/bin:/home/username/.local/bin:/home/username/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin
。
我以为maven是通过检查
JAVA_HOME
来选择java版本的,但显然它正在使用其他版本进行构建。有谁知道如何告诉maven正确的版本?
谢谢!
以下是我用来解决此类问题的步骤列表:
alternatives
配合使用,以确保使用正确的默认 Java 环境。类似于:$ alternatives --config java
There are 2 programs which provide 'java'.
Selection Command
-----------------------------------------------
+ 1 java-1.7.0-openjdk.x86_64 (/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.191-2.6.15.4.el7_5.x86_64/jre/bin/java)
* 2 java-1.8.0-openjdk.x86_64 (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.181-3.b13.el7_5.x86_64/jre/bin/java)
也尝试
javac
,因为它可能无法以相同的方式配置:
$ alternatives --config javac
maven
实例,JAVA_HOME
应该足够了。您的
mvn -version
输出证明您已正确配置它。从 PATH
中删除 Java,以确保 JAVA_HOME
和 mvn
能够找到正确的 Java。
pom.xml
还可以配置需要的编译器,类似:<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
您通常会在使用不同的 JRE 与 JDK 时遇到这种情况(更多:maven 安装的运行时为 JRE 而不是 JDK)
我在 RHEL 9.1 上也遇到了同样的问题。解决方案是查看
/etc/java/maven.conf
并在此文件中设置正确的 JAVA_HOME
。
换句话说,您可以仅将与此类似的单行添加到该
maven.conf
文件中:
JAVA_HOME=/usr/lib/jvm/java-17-openjdk
你应该表现得很好。
此外,通过检查主目录中的环境变量
JAVA_HOME
、文件 .m2/settings.xml
,以及 JVM 路径的文件 /etc/java/maven.conf
和 $MAVEN_HOME/conf/maven.conf
,有一种非常晦涩的方法可以在用户范围内配置 Maven JVM。
您可以在主目录中定义一个文件
.mavenrc
只需将 JAVA_HOME=<jdk path as in JAVA_HOME>
放在 .mavenrc
上,maven 就会自动使用该 JDK。
如果您的 Maven 恢复到某个错误的 JVM,您可以检查
~/.mavenrc
是否存在以及是否在那里定义了不需要的 JVM 路径。