我似乎无法让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
我还尝试了command here(创建mavenrc
)。我已多次尝试重新启动计算机,并已验证env var已正确设置(已在.bash_profile
中设置)。
Maven安装了Homebrew。
Java 1.8在Eclipse中运行良好(使用m2e)。我只是不能让Maven在命令行上工作。
答案 0 :(得分:54)
对我来说问题是,当我从jdk-8u25-macosx-x64.dmg
安装时,安装没有将/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK
目录链接更新为新的1.8 JDK。这可能不是原始问题的问题,但当我遇到相同的错误消息时,它就是我的解决方案。
我不知道为什么安装程序没有链接它并使问题更加混乱,根据您是从Oracle还是Apple安装它,路径会有所不同。见Mac OS X 10.6.7 Java Path Current JDK confusing
我做了以下修复我的环境
cd /System/Library/Frameworks/JavaVM.framework/Versions
sudo rm CurrentJDK
sudo ln -s /Library/Java/JavaVirtualMachines/<installed_jdk_version>.jdk/Contents CurrentJDK
答案 1 :(得分:45)
事实证明,我有一个被遗忘的~/.mavenrc
文件设置了JAVA_HOME
的值。
对于将来的读者,请检查以下位置,查看可能覆盖JAVA_HOME
的地点(按优先顺序排列):
~/.bash_profile
~/.bash_login
~/.bashrc
~/.profile
/etc/mavenrc
~/.mavenrc
答案 2 :(得分:26)
对我有用的解决方案:
在Eclipse中,我的Maven构建中的运行配置有误。转到
运行配置 - &gt; JRE [Tab]
并将运行时设置为Java 8.
答案 3 :(得分:24)
我在CentOS 6.5系统上遇到了同样的问题。
java -version
返回了Java 8版本,但javac -version
返回了Java 7版本。
我必须运行以下命令才能使各种与Java相关的符号链接指向我的JDK 8安装:
sudo alternatives --config java
sudo alternatives --config javac
sudo alternatives --config jre_openjdk
sudo alternatives --config java_sdk_openjdk
答案 4 :(得分:13)
您的JAVA_HOME
正在被其他地方覆盖。在java调用之前尝试在mvn
中回显。
答案 5 :(得分:1)
我有同样的问题,需要两个步骤来纠正:
JAVA_HOME
设置正确指向JDK; 对我来说,1步是对的,第2步有问题。在eclipse中»项目的属性»构建路径»已安装的JRE»指向JDK。
答案 6 :(得分:1)
请注意,使用Java 11还会出现“无效的目标版本”错误
[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>
答案 7 :(得分:0)
您正在使用1.8的早期访问版本。现在已经发布,您应该安装已发布的版本。
检查您的maven安装,看看您是否有与之关联的配置,指定特定的JDK。偶尔会有包装脚本在maven启动之前重置JAVA_HOME,或者maven可执行文件在包装器中启动,该包装器引用可以绑定到特定JVM的配置文件。
答案 8 :(得分:0)
如果您在持续集成服务器中使用Maven,请务必检查它的设置,因为它可能会覆盖Maven使用的JDK。对于Jenkins,我必须在常规设置中添加新的1.8 JDK并配置我的项目以使用它。