Maven:致命错误编译:无效的目标版本:1.8
Posted
技术标签:
【中文标题】Maven:致命错误编译:无效的目标版本:1.8【英文标题】:Maven: Fatal error compiling: invalid target release: 1.8 【发布时间】:2015-10-14 00:07:42 【问题描述】:我们刚刚将项目从jdk 1.6
升级到jdk 1.8
。在我的机器上构建项目时,出现以下错误。
[ERROR] 未能执行目标 org.apache.maven.plugins:maven-compiler-plugin:3.3:compile (默认编译)项目异常:致命错误编译:无效 目标版本:1.8 -> [帮助 1]
这里是使用的maven编译插件
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
我查看了许多帖子,其中大多数与没有为 java_home 配置正确版本有关。我验证了所有这些方面,没有发现任何令人担忧的地方。
Java 版本 -
qadeersmsiphone:main pdubey$ java -version
java version "1.8.0_51"
Java(TM) SE Runtime Environment (build 1.8.0_51-b16)
Java HotSpot(TM) 64-Bit Server VM (build 25.51-b03, mixed mode)
Maven 版本 -
qadeersmsiphone:main pdubey$ mvn -version
Apache Maven 3.1.1 (0728685237757ffbf44136acec0402957f723d9a; 2013-09-17 08:22:22-0700)
Maven home: /usr/share/maven
Java version: 1.8.0_51, vendor: Oracle Corporation
Java home: /Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "mac os x", version: "10.8.5", arch: "x86_64", family: "mac"
我在构建项目时检查了 maven 使用 jdk 1.8
qadeersmsiphone:main pdubey$ mvn install -debug
Apache Maven 3.1.1 (0728685237757ffbf44136acec0402957f723d9a; 2013-09-17 08:22:22-0700)
Maven home: /usr/share/maven
Java version: 1.8.0_51, vendor: Oracle Corporation
Java home: /Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "mac os x", version: "10.8.5", arch: "x86_64", family: "mac"
[INFO] Error stacktraces are turned on.
[DEBUG] Reading global settings from /usr/share/maven/conf/settings.xml
[DEBUG] Reading user settings from /Users/pdubey/.m2/settings.xml
[DEBUG] Using local repository at /Users/pdubey/.m2/repository
[DEBUG] Using manager EnhancedLocalRepositoryManager with priority 10.0 for /Users/pdubey/.m2/repository
[INFO] Scanning for projects...
更新:我可以通过删除 pom文件中的maven-compiler-plugin(理想情况下,我不想这样做)。而且我还观察到即使我 去掉这个插件,maven默认下载3.3版本的 我本地仓库中的编译器插件。我不确定这有什么问题 插件虽然源和目标似乎是正确的。
【问题讨论】:
真的吗? “Apache Maven 3.1.1 (… 2013-09-17…
”
@Holger 不知道 (..2013-09-17) 的意义是什么,但我从这里下载了 maven archive.apache.org/dist/maven/maven-3/3.1.1/binaries。请注意,我之前有 mac 的默认 maven (v3.0.3),我升级到 v3.1.1
它只是看起来比 Java 8 旧,但是,当然,这不是问题,只要编译器插件和调用的编译器可以处理请求的目标版本 1.8,他们显然不能。但是由于 Maven 版本是您发布的唯一版本号,我假设其他所有内容都与此一样古老。我不知道您的环境中还有什么其他障碍,但在您的情况下,我会尝试的第一件事是从这里下载:archive.apache.org/dist/maven/maven-3/3.3.3/binaries跨度>
对我来说,从 Maven 3.2.5 升级到 3.3.3 就成功了。
【参考方案1】:
检查 java 和 Javac 版本 - 我的 Java 版本是 1.8.0_51
$ java -version
java version "1.8.0_51"
但是 javac 版本指向的是旧 jdk 1.7.0_67
$ javac -version
javac 1.7.0_67
有几件事我们应该尝试 -
确保符号链接指向正确的 jdk。如果没有,请删除现有链接并为您的 jdk 创建新链接
cd /System/Library/Frameworks/JavaVM.framework/Versions/
rm CurrentJDK
ln -s /Library/Java/JavaVirtualMachines/<jdk version>.jdk/Contents/ CurrentJDK
在 /Library/Java/Extension 中,我有一个 tools.jar。我相信,这是来自旧的 jdk。
cd /Library/Java/Extensions
-rw-r--r-- 1 root admin 15286304 Jan 14 2015 tools.jar
删除这个
sudo rm -rf /Library/Java/Extensions
第 2 点对我有用 :)
【讨论】:
谢谢你,终于!第 2 点也为我解决了这个问题。【参考方案2】:有时这个问题与 maven 使用的 JAVA_HOME
有关。
install
目标并得到一个确切的主题消息。
然后我刚刚尝试了一个mvn -version
命令,我意识到它使用的是jdk7
然后我在控制台set JAVA_HOME=C:\Java\jdk8
中运行(我的jdk 路径,所以你自己的路径可能不同)
然后输入mvn clean install test
,它终于正常工作了
祝你好运!
【讨论】:
对我来说就是这样mvn
使用了另一个版本。如果您使用的是 powershell,请运行:$env:JAVA_HOME="C:\java\jdk8
【参考方案3】:
这里有同样的问题,但是当 maven 不断抛出这个错误时,我在 Eclipse 中使用了运行配置。通过在此处设置正确的 JDK 版本进行修复:
【讨论】:
【参考方案4】:我遇到了同样的问题:
> java -version
java version "1.8.0_111"
>javac -version
javac 1.7.0.6
我检查了系统变量中的路径,jdk 没有更新到 jdk 8。 在我用正确的 jdk 更新了路径后,它起作用了。
【讨论】:
【参考方案5】:在cent os中我们可以使用alternatives来切换版本。
alternatives --config javac
alternatives --config java
但是 MAVEN 使用 JAVA_HOME。
而且这个 JAVA_HOME 可以给个链接。
要么我们必须手动将 JAVA_HOME 指向新的 jdk 文件夹,要么手动删除/删除链接并从上述答案中再次创建一个新的相同链接。
从alternatives中我们可以得到jdk的路径
【讨论】:
【参考方案6】:首先,肯定是版本问题。
在我的情况下: java -version 显示结果
java version "1.8.0_172"
并且 javac -version 正在显示
javac 1.8.0_172
但是:Maven 使用 JAVA_HOME 环境变量来获取您的 JDK 版本来构建项目并运行它是一个插件。所以我们必须检查它的方式是
echo %JAVA_HOME%
在我的情况下是
jdk1.7.0_172
因此,只需更改变量的路径即可解决问题。 希望它会为某人节省时间。
【讨论】:
以上是关于Maven:致命错误编译:无效的目标版本:1.8的主要内容,如果未能解决你的问题,请参考以下文章
Maven 未使用 Java 11 - 编译致命错误:目标版本无效:11