Maven:无效的目标版本:10。

77

我试图使用 maven 编译我的项目,使用的是 Java 10,但是遇到了问题。在我的IDE(IntelliJ IDEA)中, 在Java 10下一切都可以编译和运行正常。我安装了最新版本的 maven (3.5.4),并将我的 JAVA_HOME 指向了 JDK 10

$ mvn --version
Apache Maven 3.5.4 (1edded0938998edf8bf061f1ceb3cfdeccf443fe; 2018-06-17T20:33:14+02:00)
Maven home: C:\Maven\bin\..
Java version: 10.0.2, vendor: Oracle Corporation, runtime: C:\Program Files\Java\jdk-10.0.2
Default locale: en_US, platform encoding: Cp1252
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"

我使用的maven命令是:

mvn package -Dmaven.test.skip

在我的pom.xml文件中,我为Java 8配置了以下内容,一切都正常:

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <libraries.directory>libraries</libraries.directory>
</properties>

对于Java 10,我将其更改为以下内容:

<maven.compiler.source>10</maven.compiler.source>
<maven.compiler.target>10</maven.compiler.target>

这不起作用,就像在源编译器和目标编译器的版本中使用1.10一样。

完整的调试日志输出(-X命令行开关)如下:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.7.0:compile (default-compile) on project My-Project: Fatal error compiling: invalid target release: 1.10 -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.7.0:compile (default-compile) on project My-Project: Fatal error compiling
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:213)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:154)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:146)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
    at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
    at org.apache.maven.cli.MavenCli.execute (MavenCli.java:954)
    at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:288)
    at org.apache.maven.cli.MavenCli.main (MavenCli.java:192)
    at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke (Method.java:498)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:289)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:229)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:415)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:356)
Caused by: org.apache.maven.plugin.MojoExecutionException: Fatal error compiling
    at org.apache.maven.plugin.compiler.AbstractCompilerMojo.execute (AbstractCompilerMojo.java:1086)
    at org.apache.maven.plugin.compiler.CompilerMojo.execute (CompilerMojo.java:168)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:137)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:208)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:154)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:146)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
    at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
    at org.apache.maven.cli.MavenCli.execute (MavenCli.java:954)
    at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:288)
    at org.apache.maven.cli.MavenCli.main (MavenCli.java:192)
    at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke (Method.java:498)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:289)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:229)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:415)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:356)
Caused by: org.codehaus.plexus.compiler.CompilerException: invalid target release: 1.10
    at org.codehaus.plexus.compiler.javac.JavaxToolsCompiler.compileInProcess (JavaxToolsCompiler.java:173)
    at org.codehaus.plexus.compiler.javac.JavacCompiler.performCompile (JavacCompiler.java:174)
    at org.apache.maven.plugin.compiler.AbstractCompilerMojo.execute (AbstractCompilerMojo.java:1075)
    at org.apache.maven.plugin.compiler.CompilerMojo.execute (CompilerMojo.java:168)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:137)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:208)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:154)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:146)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
    at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
    at org.apache.maven.cli.MavenCli.execute (MavenCli.java:954)
    at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:288)
    at org.apache.maven.cli.MavenCli.main (MavenCli.java:192)
    at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke (Method.java:498)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:289)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:229)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:415)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:356)
Caused by: java.lang.IllegalArgumentException: invalid target release: 1.10
    at com.sun.tools.javac.main.OptionHelper$GrumpyHelper.error (OptionHelper.java:103)
    at com.sun.tools.javac.main.Option$12.process (Option.java:216)
    at com.sun.tools.javac.api.JavacTool.processOptions (JavacTool.java:217)
    at com.sun.tools.javac.api.JavacTool.getTask (JavacTool.java:156)
    at com.sun.tools.javac.api.JavacTool.getTask (JavacTool.java:107)
    at com.sun.tools.javac.api.JavacTool.getTask (JavacTool.java:64)
    at org.codehaus.plexus.compiler.javac.JavaxToolsCompiler.compileInProcess (JavaxToolsCompiler.java:125)
    at org.codehaus.plexus.compiler.javac.JavacCompiler.performCompile (JavacCompiler.java:174)
    at org.apache.maven.plugin.compiler.AbstractCompilerMojo.execute (AbstractCompilerMojo.java:1075)
    at org.apache.maven.plugin.compiler.CompilerMojo.execute (CompilerMojo.java:168)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:137)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:208)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:154)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:146)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
    at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
    at org.apache.maven.cli.MavenCli.execute (MavenCli.java:954)
    at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:288)
    at org.apache.maven.cli.MavenCli.main (MavenCli.java:192)
    at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke (Method.java:498)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:289)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:229)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:415)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:356)
[ERROR]
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException

按照这个答案的建议,添加maven-compiler-plugin也不起作用:

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

有什么办法可以解决这个问题吗?


2
这个问题已经在maven-compiler-plugin 3.7.1版本中得到了修复。请参见https://issues.apache.org/jira/browse/MCOMPILER-332 - rodrigoap
@rodrigoap 有趣的是,Maven中央仓库还没有3.7.1版本,因此找不到:https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-compiler-plugin - BullyWiiPlaza
当你使用 -X 运行时,你是否看到 Using compiler 'javac'. 并且 Command line options: 显示了什么? - David Conrad
2
当指定了错误的版本时,日志会显示失败。请确保使用 <release>10<release> 而不是 1.10。与 10 分享日志,以查看实际的失败原因。 - Naman
@BullyWiiPlaza mvnrepository 不是中央仓库。可以在这里找到:https://search.maven.org/ - khmarbaise
12个回答

53

通过将JAVA_HOME环境变量设置为正确版本的JDK,我的问题得到了解决。

在maven-compiler-plugin中,我的源和目标Java版本是11,java -version也是11版本,但我的JAVA_HOME指向JDK-1.8。

请使用终端而不是IDE再次检查JAVA_HOME:

Linux:
echo $JAVA_HOME

Win:
echo %JAVA_HOME%

然后在同一个终端中构建您的项目:

mvn clean package

1
这对我也起作用了。在Windows上转到环境变量,然后系统变量并使用Java JDK路径编辑PATH变量。 - Daniel Belém Duarte

30

这对我有效:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.7.0</version>
            <configuration>
                <release>10</release>
            </configuration>
        </plugin>
    </plugins>
</build>

这个答案说你需要:

<dependencies>
    <dependency>
        <groupId>org.ow2.asm</groupId>
        <artifactId>asm</artifactId>
        <version>6.2</version> <!-- Use newer version of ASM -->
    </dependency>
</dependencies>

<plugin/>标签内部,但新版本的mvn(3.5.4)必须排除它,因为我不需要它。


1
无论是否添加依赖项,我仍然会收到“致命错误编译:无效标志:--release -> [帮助1]”。 javac -help显示:“--release <release> 编译为特定的VM版本。支持的目标:10、6、7、8、9”。 - BullyWiiPlaza
1
简单来说,如果你使用JDK 9及以上版本,应该使用<maven.compiler.release>9</maven.compiler.release>而不是<maven.compiler.source>..</maven.compiler.sources><maven.compiler.target>..</maven.compiler.target>,因为JDK 8没有--release选项。 - khmarbaise
1
maven-compiler-plugin=3.7.0 + release=10 运行得非常顺利。 - Oleksii Kyslytsyn
2
更改 JAVA_HOME 也可能是必要的:https://dev59.com/MlUM5IYBdhLWcg3wCs1Z#52139841 - binoternary
3
对于Java 1.6到1.10版本,请使用<java.version>1.x</java.version>。但是在Java 11中,应该使用"11"而不是"1.11"。 - karl li
显示剩余4条评论

17

通过运行java -version命令,可以获取您的Java版本信息。

您将获得以下输出:

java version "1.8.0_201"

现在,请打开您的 POM 文件,并使用您已安装的 Java 版本更新 maven-compiler-plugin 的源代码和目标属性。在我的情况下,它是 1.8。

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

7
关于检查已安装的 Java 版本的提示很好,但问题实际上是关于使用 Java 10 而不是将其恢复为 8 - BullyWiiPlaza

14

我在使用Spring Boot和Java 11时遇到了类似的问题。我通过在pom文件中定义以下属性来解决它。

<maven.compiler.release>11</maven.compiler.release>

或许对未来的某个人有用。


<maven.compiler.release>11</maven.compiler.release>作为属性添加或将<release>11</release>作为配置添加到maven-compiler-plugin中,可以得到完全相同的结果。插件文档中关于release的说明。 - Avec
还要确保使用 mvn --version 运行至少 Maven: 3.6.0,该版本至少使用 Java 9。旧版本没有“--release”选项。 - luke
这个标签 maven.compiler.release 取代了 maven.compiler.sourcemaven.compiler.target 标签。如果使用 release 标签,请注释掉 source 和 target 行。 - Basil Bourque

10
这意味着您正在使用 java.version 10,但您尚未安装它。
<properties>
    <java.version>10</java.version>
</properties>

6

如果你正在使用Intellij,你需要按照以下步骤进行操作(我这里使用的是Java 11,但同样适用于Java 10和其他版本):

  1. 在“项目结构”中将SDK更改为Java 11

enter image description here

enter image description here

  1. 在“项目结构”中更改模块的语言级别(如果需要)

enter image description here

  1. 在设置中更改运行器下的JRE

enter image description here

  1. 在设置中的Java编译器下更改目标字节码版本

enter image description here

  1. 检查Maven版本以支持Java 11,在设置中的Maven下查看 enter image description here

  2. 在你的POM文件中,将版本说明如下,你可以忽略这里的encoding标签

enter image description here

  1. 在构建项目之前,最后确认你的运行配置

enter image description here

  1. 如果你正在使用Windows机器,则相应地更改环境变量JAVA_HOME、Path和MAVEN_HOME。

6

检查您的JAVA_HOME版本。看起来您在JAVA_HOME中的Java版本与POM中的不同。通过在Windows环境变量中进行编辑,正确设置JAVA_HOME路径。


1
有时候问题只是你的Java版本。例如,当项目使用Java 10但你的Java路径设置为8等。尝试运行java -version并确保它与你的项目相同。如果不是,请修复它并重试。

1
感谢上面的回答,你使用的是10,我使用的是11,但我猜步骤是相似的。
对我来说,重点是在我的pom.xml中明确指定Java 11版本,我通过以下步骤解决了这个问题。
1. 打开终端并输入:java -version,然后我得到了1.8,并去.bash_profile切换Java版本到11.2,因为我安装了多个Java版本。请记住“重新启动”您的终端并再次检查您的Java版本以确认切换成功。
2. 然后我去了文件->项目结构,确保我的IntelliJ使用与我的环境相同的版本,即11.2。
3. 重新启动Intellij,mvn clean install,问题解决了,希望这可以帮助遇到此问题的人,谢谢。

0
在我的情况下,我只是进入终端,然后输入java -version,然后按回车键。这给了我我的Java版本,它是1.8,然后我右键单击我的项目文件夹,然后点击打开POM。然后在pom文件中有这段代码。
<properties>
        <java.version>17</java.version>
    </properties>

我把17改成了1.8,就像这样。
<properties>
        <java.version>1.8</java.version>
    </properties>

我保存并关闭了IDE,然后重新打开运行我的程序,一切都很好,希望这可以帮到你。


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