致命错误编译:无效的目标版本:1.8-> [帮助1]


170

类似的问题,例如在无效目标版本发布的问题:1.7,但是在关注博客之后,我的问题仍然没有解决。

无法在项目hm_app上执行目标org.apache.maven.plugins:maven-compiler-plugin:3.1:compile(默认编译):致命错误编译:无效目标版本:1.8-> [帮助1]

遇到此问题时,我正在按照教程进行操作。

abt java & mvn

C:\mvn>echo %JAVA_HOME% 
C:\mvn>echo %JRE_HOME%
C:\mvn>echo %MAVEN_HOME% yields

输出

C:\Program Files\Java\jdk1.7.0_51
C:\Program Files\Java\jre7
C:\apache-maven-3.0.4

3
...并且确定要在某个地方安装Java 8吗?
Makoto 2015年

我有x86、64个Java 7和没有Java 8
rvd 2015年

3
好的。那么,为什么要尝试在没有Java 8编译器的情况下编译Java 8代码呢?
Makoto 2015年

@Makoto ty,我研究了安装Java 8的问题,解决了它.... ty man :)
rvd 2015年

@Makoto最后,我明白了您的意思:“好。那么,为什么要尝试在没有Java 8编译器的情况下编译Java 8代码?” 所以我只是将pom.xml文件java.version> 1.8 </java.version>更改为java.version> 1.7 </java.version>,并且我也可以在java7上使用mvn compile
rvd

Answers:


281

您已将%JAVA_HOMEjdk 设置为1.7,但是您正在尝试使用1.8进行编译。安装jdk 1.8,并确保您%JAVA_HOME指向该点或将目标发行版降至1.7。

无效的目标版本:1.8

目标发行版是指jdk版本。


7
在我的情况下,另一种可能的解决方案是将pom.xml文件java.version> 1.8 </java.version>修改为java.version> 1.7 </java.version>
rvd

1
那就是maven寻找Java版本的地方。因此,有效地将Java版本更改为%JAVA_HOME上安装的版本。
Zavior

2
在我的Mac上,我确实导出JAVA_HOME = /usr/libexec/java_home -v 1.8来将JAVA_HOME设置为1.8 JDK的正确位置。提供您最喜欢的1.8版本。(在=之后和8之后有反引号)。
2015年

是的,对,你救了我。我将其更改为另一个昨天仅支持1.7的旧程序:D谢谢!
DavutGürbüz,

31

将值放在插件中:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.1</version>
    <configuration>
        <source>1.8</source>
        <target>1.8</target>
    </configuration>
</plugin>

错误是使用:

<source>${java.version}</source>
<target>${java.version}</target>

2
就我而言,解决方案是将源和目标都设置为1.7
思考一下'16

我可以在哪个文件中找到它?
Yusril Maulidan Raji

21

就我而言,行家“运行配置”使用了错误的JRE(1.7)。一定要检查Run-> Run Configurations->(Tab)JRE为jdk1.8.x。


没错,因此我们下次检查是否有以下错误发生:JAVA_HOME,BUILD_Configuration,RUN_Configuration
Farhan


5

对于日食,这是我解决问题的方法:

  1. 首选项->编译器->编译器编译器级别(更改为1.8) 在此处输入图片说明

  2. 选择->已安装的JRE->选择JAVA SE 8 1.8 在此处输入图片说明

  3. 使用Run as maven build通过maven进行重建。

它不应再显示无效的目标错误。
注意:我不必在终端中设置或更改任何其他变量。希望这可以帮助。


2

将其放在您的.profile中将动态地照顾您 $JAVA_HOME

export JAVA_HOME=$(/usr/libexec/java_home)

然后关闭您的外壳,打开一个新外壳并进行测试

echo $JAVA_HOME

它应该显示类似

/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home

如果不是,请在启动脚本中删除所有其他JAVA_HOME分配。请记住,这些启动脚本以a开头,.因此它们在使用*通配符时是隐藏的,不会包含在内,例如,如果要grep您主目录的所有文件,则需要:

grep -s JAVA_HOME ~/.* --exclude=.bash_history

1

我面临的问题是我能够从命令提示符而不是从Eclipse进行Maven构建。在eclipse中对我有用的是我将运行配置更改为指向JDK内的JRE文件夹而不是将其保留在仅符合标准的JDK文件夹。此解决方案也可能对您有效,但仅当所有Java路径均正确,java和javac显示的版本与pom.xml目标中的版本相同时,才尝试使用此解决方案。


这是我的问题和解决方案。
Skychan


1

正如Camila Macedo所提到的-您必须为编译器插件明确指出Java版本。对于春季启动,您可以通过下一个属性来实现:

  <properties>
    <java.version>1.8</java.version>
    <maven.compiler.release>8</maven.compiler.release>
  </properties>

是的,设置maven.compiler.release已在我的Maven项目中修复。
Cortex

1

使用IntelliJ,我只需要安装另一个(更高)JDK版本。重新启动IDE后,一切正常,甚至所有依赖项也都解决了。


1
重新启动智能是我的关键。我将JAVA_HOME的环境变量更新为指向不同的Java版本,但似乎系统变量在现有CMD会话中未刷新。只需创建新的终端会话就足够了。
Ubeogesh

0

这个问题并未明确询问有关Docker的问题,但是当我有一个针对1.9的pom.xml文件时,我收到了同样的错误...

<properties>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  <maven.compiler.source>1.9</maven.compiler.source>
  <maven.compiler.target>1.9</maven.compiler.target>
</properties>

...但随后尝试通过自己指定“行家”对Docker容器运行测试。

docker run -t --rm -v m2_repository:/root/.m2/repository -v $(pwd):/work -w /work maven mvn -e test

对我来说,解决方法是针对我需要的确切版本。

docker run -t --rm -v m2_repository:/root/.m2/repository -v $(pwd):/work -w /work maven:3.5.2-jdk-9 mvn test

(您可以在此处了解更多信息。)


0

在Windows计算机上,您可以临时设置Java版本。
例如,要将版本更改为Java 8,请在上运行以下命令cmd

set JAVA_HOME=C:\\...\jdk1.8.0_65

0

进行强制Maven更新,它将带来兼容的1.8 Jar版本,然后在构建时,从运行配置中将Execute环境中的JRE版本更新为1.8,然后单击RUN。


0

如果您使用的是Eclipse IDE,请进入“窗口”菜单并选择首选项,然后在其中搜索已安装的JRE,然后选择构建项目所需的JRE。


-4

在我的情况下,这是可行的:

我打开pom.xml并替换了以下其中一个插件。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.2</version>
    <configuration>
        <source>1.7</source>
        <target>1.7</target>
    </configuration>
</plugin>

在编辑源标签和目标标签之前1.8,都将其更改为,1.7并且可以正常工作。


您是否了解所做的更改,或者只是希望最有效地进行更改?
Popeye

都。我了解该项目现在在Java 1.7版本上运行。我这样做是希望它能起作用。
VIJAYKUMAR REDDY ALAVALA
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.