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

202

与在invalid target release: 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

5
你确定已经安装了Java 8吗? - Makoto
我有x86、64位Java 7,但没有Java 8。 - rvd
4
好的,你为什么要在没有Java 8编译器的情况下尝试编译Java 8代码? - Makoto
@Makoto 谢谢您关注我的问题,安装Java 8解决了它...谢谢你:) - rvd
@Makoto,最终我明白了你的意思:“好吧。那么为什么你要在没有Java 8编译器的情况下尝试编译Java 8代码?”于是我只需在我的pom.xml文件中将java.version>1.8</java.version>更改为java.version>1.7</java.version>,就可以在Java 7上使用mvn编译了。 - rvd
22个回答

317
你已经将你的%JAVA_HOME设置为jdk 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
3
在我的Mac上,我使用export JAVA_HOME=/usr/libexec/java_home -v 1.8将JAVA_HOME设置为1.8 JDK的正确位置。请在1.8的位置上提供您喜欢的版本。(等号和8后面有反引号) - bruce szalwinski
是的,你说对了。昨天我把它改成了只支持1.7的另一个遗留程序的编译:D 谢谢! - Davut Gürbüz

44

将该值放入插件中:

<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。 - thinkhy
我在哪个文件中可以找到这个? - Yusril Maulidan Raji
@YusrilMaulidanRaji pom.xml - Sithija Piyuman Thewa Hettige

25

在我的情况下,Maven的"运行配置"使用了错误的JRE版本(1.7)。请务必检查运行 -> 运行配置 -> (选项卡) JRE,确保其为jdk1.8.x。


这是正确的,因此下次出现此错误时我们需要检查以下事项:JAVA_HOME、BUILD_Configuration、RUN_Configuration。 - Farhan

16
问题已解决,因为我的JDK指向1.7,而JRE指向1.8。在命令提示符中输入以下内容进行检查。
java -version

javac -version

两者应该是相同的。


6

针对Eclipse这里是我解决问题的方法:

  1. 首选项 --> 编译器 --> 编译器抱怨等级 (更改为1.8) 进入图像描述

  2. 首选项 --> 已安装的JREs --> 选择JAVA SE 8 1.8 进入图像描述

  3. 通过“运行maven构建”重建。

以后就不会再显示无效目标错误了。
注意:我没有在终端中设置或更改任何其他变量。 希望这能有所帮助。


5
把这段代码添加到您的 .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分配。请记住,这些启动脚本以 . 开头,因此它们是隐藏的,并且在使用*通配符时不会被包含,例如,如果您想grep您的主目录中的所有文件,则需要:

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

4

我在部署Dokku时遇到了问题,因为某种原因它选择了JDK 1.7。

创建一个system.properties文件,并设置java.runtime.version=1.8解决了这个问题。现在Dokku使用Java 8版本。 在Heroku上选择JDK

以前我从未这样做过...


提示仍然有效。我花了很多时间在Dokku中更改Java版本到11。非常感谢。 - Mister Vanderbilt
你让我的一天变得更美好了!感谢你的回答。 - godo57

3

我在尝试将我的Spring Boot项目部署到Heroku时遇到了类似的问题,尽管我的问题是“无效的目标版本:11”。 我通过添加一个名为system.properties的新文件来解决它,然后在文件中添加以下内容:java.runtime.version=11(我使用JDK 11)。


3

如Camila Macedo所提到的 - 您必须显式指定编译器插件的Java版本。对于Spring Boot,您可以通过以下属性来实现:

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

是的,在我的Maven项目中设置maven.compiler.release解决了这个问题。 - Cortex

2

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


1
重启IntelliJ对我很关键。我更新了JAVA_HOME的环境变量,指向不同的Java版本,但似乎系统变量在现有CMD会话中没有刷新。可能只需创建新的终端会话即可。 - Ubeogesh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接