我们刚刚将项目从jdk 1.6
升级到jdk 1.8
。在我的机器中构建项目时,我收到了以下错误。
[错误]无法执行目标 org.apache.maven.plugins:Maven的编译器插件:3.3:编译 项目异常时的(default-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版本 我本地仓库中的编译器插件。我不确定这有什么不对 插件虽然源和目标似乎是正确的。
答案 0 :(得分:13)
检查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点为我做了诀窍:))
答案 1 :(得分:6)
有时候这个问题与maven使用的JAVA_HOME
有关。
install
目标,并准确地显示了subj消息。 mvn -version
命令,我意识到它使用了jdk7 set JAVA_HOME=C:\Java\jdk8
中运行(我的jdk路径,所以你自己可能会有所不同)mvn clean install test
,最后罚款 答案 2 :(得分:1)
这里也有同样的问题,但是当maven继续抛出这个错误时,我在Eclipse中使用了运行配置。通过在此处设置正确的JDK版本来修复:
答案 3 :(得分:0)
我有同样的问题:
> java -version
java version "1.8.0_111"
>javac -version
javac 1.7.0.6
我检查了系统变量中的路径,并且jdk没有更新为jdk 8。 在用正确的jdk更新路径后,它起作用了。
答案 4 :(得分:0)
在cent os中,我们可以使用其他方式来切换版本。
alternatives --config javac
alternatives --config java
但是MAVEN使用JAVA_HOME。
此JAVA_HOME可以链接。
要么我们必须手动将JAVA_HOME指向新的jdk文件夹,要么手动删除/删除链接,然后根据以上答案再次创建一个新的相同链接。
从替代方法中,我们可以获得jdk的路径
答案 5 :(得分:0)
首先,这绝对是版本问题。
在我的情况下: 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
因此只需更改变量的路径即可解决此问题。 希望可以节省时间给别人。