【问题标题】:Maven is using wrong java versionMaven 使用了错误的 java 版本
【发布时间】:2021-05-22 12:49:32
【问题描述】:

我正在尝试在 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+7PATH/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 正确的版本? 谢谢!

【问题讨论】:

标签: java maven centos


【解决方案1】:

以下是我用来解决此类问题的步骤列表:

  1. Linux 通常与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
  1. 对于您的maven 实例,JAVA_HOME 应该足够了。

mvn -version 的输出证明您已正确配置它。从PATH 中删除您的Java,以确保JAVA_HOMEmvn 能够找到正确的Java。

  1. pom.xml也可以配置需要的编译器,类似:
<properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
</properties>
  1. 另一件事可能是您没有使用相同的 ENV(不同的终端可能没有导出相同的环境变量 - 我假设您在 CentOS 上,您已经遇到过这种情况)。您必须退出终端并重新进入才能使默认变量生效。

当使用不同的 JRE 和 JDK 时,您通常会遇到这种情况 (more: maven installation has runtime as JRE instead of JDK)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-30
    • 2015-02-09
    • 2010-10-31
    • 1970-01-01
    • 2018-06-05
    • 2022-01-24
    • 1970-01-01
    • 2020-04-17
    相关资源
    最近更新 更多