没法让 Maven 认出 Java 1.8

我似乎无法让 Maven 使用 Java 1.8。使用1.8作为目标会出现以下错误:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile
(default-compile) on project csaro: Fatal error compiling: invalid target
release: 1.8 -> [Help 1]

错误的原因显而易见: Maven 没有使用正确的 Java 版本:

$ mvn -version
Apache Maven 3.2.2 (45f7c06d68e745d05611f7fd14efb6594181933e; 2014-06-17T07:51:42-06:00)
Maven home: /usr/local/Cellar/maven/3.2.2/libexec
Java version: 1.7.0_51, vendor: Oracle Corporation
Java home: /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "mac os x", version: "10.9.2", arch: "x86_64", family: "mac"

但 Java 的安装版本应该是1.8:

$ java -version
java version "1.8.0_20-ea"
Java(TM) SE Runtime Environment (build 1.8.0_20-ea-b22)
Java HotSpot(TM) 64-Bit Server VM (build 25.20-b21, mixed mode)

JAVA _ HOME 设置为:

$ echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/jdk1.8.0_20.jdk/Contents/Home

我还尝试了 在这里指挥(它创建了 mavenrc)。我多次尝试重新启动计算机,并且验证了 env 变量的设置是否正确(它在 .bash_profile中设置)。

Maven 被装上了自制软件。

Java 1.8在 Eclipse (使用 m2e)中运行良好。我只是不能让 Maven 在命令行上工作。

101420 次浏览

您正在使用1.8的早期访问版本。现在已经发布了,您应该安装已发布的版本。

检查 maven 安装,看看是否有一个指定特定 JDK 的相关配置。偶尔会有一些包装器脚本在 maven 启动之前重置 JAVA _ HOME,或者 maven 可执行文件在一个引用配置文件的包装器中启动,该配置文件可以将您绑定到特定的 JVM。

您的 JAVA_HOME正在从其他地方被重写。请尝试在 Java 调用之前在 mvn中回显。

原来我忘记了一个设置了 JAVA_HOME值的 ~/.mavenrc文件。

对于未来的读者,请检查以下位置,找出可能覆盖 JAVA_HOME的位置(以升优先顺序显示) :

  • ~/.bash_profile
  • ~/.bash_login
  • ~/.bashrc
  • ~/.profile
  • /etc/mavenrc
  • ~/.mavenrc

对我来说,问题是当我从 jdk-8u25-macosx-x64.dmg安装时,安装没有更新到新的1.8 JDK 的 /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK目录链接。这可能不是最初问题的问题,但是当我遇到同样的错误消息时,它是我的解决方案。

我不知道为什么安装程序没有链接它,更让人困惑的是,路径是不同的,这取决于你是从 Oracle 还是 Apple 安装的。参见 Mac OS X 10.6.7 Java Path Current JDK 混乱

我做了以下工作来修复我的环境

cd /System/Library/Frameworks/JavaVM.framework/Versions
sudo rm CurrentJDK
sudo ln -s /Library/Java/JavaVirtualMachines/<installed_jdk_version>.jdk/Contents CurrentJDK

对我有效的解决办法是:

在 Eclipse 中,我在 Maven 构建中有一个错误的运行配置

运行配置-> JRE [ Tab ]

并将运行时设置为 Java8。

我在 CentOS 6.5系统上也遇到了同样的问题。

java -version返回 Java8版本,而 javac -version返回 Java7版本。

我必须运行以下命令才能得到指向我的 JDK 8安装的各种与 Java 相关的符号链接:

sudo alternatives --config java
sudo alternatives --config javac
sudo alternatives --config jre_openjdk
sudo alternatives --config java_sdk_openjdk

如果在持续集成服务器中使用 Maven,一定要检查它的设置,因为它可能会覆盖 Maven 使用的 JDK。对于 Jenkins,我必须在通用设置中添加新的1.8 JDK,并配置我的项目来使用它。

我也有同样的问题,需要两个步骤来纠正:

  1. 确保 JAVA_HOME设置正确指向 JDK;
  2. Eclipse 中的 JDK 和 JRE 应该指向相同的版本。

对我来说,一步是正确的,第二步有问题。在 eclipse 中“ Project 的属性”Build Path“ Installated JRE”指向 JDK。

注意,您还可以在 Java11中得到“无效的目标发布”错误

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-
plugin:3.8.0:compile (default-compile) on project projects-migration:
Fatal error compiling: error: invalid target release: 1.11 -> [Help 1]

如果在 POM 中设置 1.11而不仅仅是 11

错误:

<java.version>1.11</java.version>

正确:

<java.version>11</java.version>