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

Fatal error compiling: invalid target release: 1.8 -> [Help 1]

invalid target release: 1.7 上发布的问题类似,但关注博客后我的问题仍未解决。

Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project hm_app: Fatal error compiling: invalid target release: 1.8 -> [Help 1]

当我遇到这个问题时,我正在关注 as tutorial

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

您已将 %JAVA_HOME 设置为 jdk 1.7,但您正在尝试使用 1.8 进行编译。安装 jdk 1.8 并确保您的 %JAVA_HOME 指向它或将目标版本降低到 1.7。

invalid target release: 1.8

目标版本指的是 jdk 版本。

将值放入插件中:

<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>

将其放入您的 .profile 将动态处理您的 $JAVA_HOME

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

之后关闭您的 shell,打开一个新的并使用

进行测试
echo $JAVA_HOME

它应该显示类似

的内容
/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home

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

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

在我的例子中,maven "Run configuration" 使用了错误的 JRE (1.7)。一定要检查 运行 -> 运行 配置 -> (Tab) JRE 是一些 jdk1.8.x.

问题已解决,因为我有一个指向 1.7 的 JDK 和指向 1.8 的 JRE。通过键入

检查命令提示符
java -version

javac -version

两者应该相同。

我面临的问题是我能够从命令提示符而不是从 Eclipse.What 进行 maven 构建,在 eclipse 中对我有用的是我将 运行 配置更改为指向到 JDK 内的 JRE 文件夹而不是仅根据 standard.This 解决方案将其留在 JDK 文件夹中也可能对您有用,但当且仅当所有 java 路径正确,java 和 javac 显示的版本与 pom.xml 的目标中存在的版本相同。

在我的案例中起作用的是:

我打开 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 并且它起作用了。

这个问题没有明确询问 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>

... 但随后尝试通过单独指定 "maven" 来针对 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

(你可以learn more here.)

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

  1. Preferences --> Compiler --> Compiler Complainer Level (改为1.8)

  2. 首选项 --> 安装的 JRE --> select JAVA SE 8 1.8

  3. 使用 运行 作为 maven 构建通过 maven 重建。

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

我在 Dokku 上部署时遇到了这个问题,出于某种原因它选择了 JDK 1.7

创建 system.properties 文件并设置 java.runtime.version=1.8 解决了问题。 Dokku 现在使用 Java 版本 8。 Choosing a JDK on Heroku

我以前从来没有这样做过...

在 Windows 机器上你可以临时设置 Java 版本。
例如,要将版本更改为 Java 8,运行 cmd 上的此命令:

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

执行强制 Maven 更新,这将带来兼容的 1.8 Jar 版本,然后在构建时,将执行环境中的 JRE 版本从 运行 配置更新为 1.8,然后点击 运行

如果您使用的是 Eclipse IDE,则进入 Window 菜单和 select 首选项,然后在其中搜索已安装的 JRE 和 select 您需要构建的 JRE项目

如 Camila Macedo 所述 - 您必须明确指出编译器插件的 java 版本。对于 spring 引导,您可以通过下一个 属性:

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

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

就我而言 (IntelliJ),我需要检查我是否有 正确的 Runner for maven:

  1. 首选项
  2. 构建、执行、部署
  3. Maven -> 亚军

当我尝试将我的 spring 引导项目部署到 heroku 时,我遇到了类似的问题,尽管我的问题是 invalid target release: 11。 我通过添加一个新文件 system.properties 解决了它,添加到文件的内容是 java.runtime.version=11 (对我来说,我使用 JDK 11)。

NETBEANS 错误: 无法在项目 doit 上执行目标 org.apache.maven.pluginsmaven-compiler-plugin3.1compile(默认编译)致命错误编译无效目标版本 11 - [帮助 1]

我是如何解决问题的: .右键单击该项目。 .转到属性。 .单击来源。 .转到Source/Binary格式并更改为最新版本

以我为例 (1.8)

首先,如果你使用的是eclipse,请查看Build Path -> Configure Build Path -> Java Build Path,看看你的项目使用的是哪个java版本。我推荐使用 Java 1.8。 其次,检查 pom.xml 文件。 ctrl + F 搜索文本“java.version”=> 将其更改为 1.8。 第三次安装 Java 1.8,然后将 JAVE_HOME 路径更改为指向 Java 1.8 文件夹。