【问题标题】:Unable to build Java project targeting JDK 11, Invalid target release 11无法构建面向 JDK 11 的 Java 项目,目标版本 11 无效
【发布时间】:2020-01-28 13:31:50
【问题描述】:

我随 Maven 3.6.2 一起安装了 JDK 11,并且在编译我的 Java maven 项目时使用容易出错。使用此配置:

pom.xml:

<properties>
  <java.version>11</java.version>
  <maven.compiler.source>${java.version}</maven.compiler.source>
  <maven.compiler.target>${java.version}</maven.compiler.target>
</properties>

pom.xml:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>${maven.compiler.plugin.version}</version>
    <configuration>
        <compilerId>javac-with-errorprone</compilerId>
        <forceJavacCompilerUse>true</forceJavacCompilerUse>
            <useIncrementalCompilation>false</useIncrementalCompilation>

        <compilerArgs>
            <arg>-Xep:ParameterName:OFF</arg>
        </compilerArgs>
        <compilerArguments>
            <endorseddirs>${endorsed.dir}</endorseddirs>
        </compilerArguments>
     </configuration>
     <dependencies>
        <dependency>
          <groupId>org.codehaus.plexus</groupId>
          <artifactId>plexus-compiler-javac-errorprone</artifactId>
          <version>2.8.5</version>
        </dependency>
        <dependency>
          <groupId>com.google.errorprone</groupId>
          <artifactId>error_prone_core</artifactId>
          <version>${google.error.prone.version}</version>
        </dependency>
      </dependencies>
  </plugin>

我收到此错误:

CompilerException:InvocationTargetException:无效的目标版本:11

我尝试了以下信息: Unable to compile simple Java 10 / Java 11 project with Maven

但是,升级 ASM 并没有改变任何东西。

【问题讨论】:

  • 您正在使用旧版本的 Java 进行编译。运行mvn -v,maven 会告诉你它在哪个 java 版本上运行
  • 是的,我之前检查过,它仍然显示 11. Apache Maven 3.6.2 (40f52333136460af0dc0d7232c0dc0bcf0d9e117; 2019-08-27T11:06:16-04:00) Maven home: /opt/Apache /maven/3.6.2 Java 版本:11.0.3-gentoo,供应商:Gentoo,运行时:/usr/lib64/openjdk-11 默认语言环境:en_US,平台编码:UTF-8 操作系统名称:“linux”,版本:“ 4.19.27-gentoo-r1”,拱:“amd64”,家庭:“unix”
  • 啊,我已经手动“升级”到 11,我错过了 javac -> 11
  • 让JAVA_HOME指向你的JDK11安装目录就足够了。这就是 maven 默认使用的。您可以在运行 maven 的 shell 会话中执行此操作(如果需要,将其他 java 版本保留为系统默认值)
  • 您应该只使用 JAVA_HOME 没有其他任何技巧与符号链接等会失败。此外,我不明白您为什么向 maven-compiler-plugin 添加了许多依赖项?除此之外,您应该使用补充 &lt;maven.compiler.release&gt;11&lt;/maven.compiler.release&gt; 来使用 javac 的 --release 开关来检查 JDK9+ 中的引导类路径等。我正在开发一个不需要此类配置的 JDK11 项目。顺便说一句:如果我没记错的话,不再支持背书目录(不记得哪些版本)......

标签: java maven java-11


【解决方案1】:

根据 Maven 文档:

编译器插件用于编译项目的源代码。 从 3.0 开始,默认编译器是 javax.tools.JavaCompiler(如果你 正在使用 java 1.6) 并用于编译 Java 源代码。如果你想 要强制使用 javac 插件,您必须配置插件选项 forceJavacCompilerUse.

另请注意,目前默认源设置为 1.6,而 默认目标设置为 1.6,与您运行 Maven 的 JDK 无关 和。强烈建议您通过设置更改这些默认值 源和目标,如设置 -source 和 -target 中所述 Java 编译器。

将源和目标改为11后如下:

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

没有出现上述java 11版本无效的错误

【讨论】:

    【解决方案2】:

    我输入了以下属性:1.11 并以这种方式在 maven 编译器 pugin 中输入:1111。 它对我有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-05
      • 2021-04-20
      • 2019-11-11
      • 2020-11-19
      • 1970-01-01
      • 2019-06-27
      • 2019-03-30
      • 1970-01-01
      相关资源
      最近更新 更多