无法构建针对JDK 11的Java项目,目标发布版本无效11。

3

我已经安装了JDK 11和Maven 3.6.2,并且正在使用error prone编译我的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>

我遇到了这个错误:
编译器异常:调用目标异常:无效的目标版本:11
我尝试按照以下信息操作: 无法使用Maven编译简单的Java 10 / Java 11项目 然而,升级ASM并没有改变任何东西。

6
你正在使用较旧版本的Java进行编译。运行 mvn -v 命令,Maven会告诉你它正在使用哪个Java版本进行编译。请注意,不要改变原意。 - ernest_k
我在修复了javac符号链接后仍然遇到问题。我的JAVA_HOME指向11。我会再仔细查看一下... - Walter
3
只需将JAVA_HOME指向JDK11安装目录即可,这是maven的默认设置。在运行maven的shell会话中执行此操作即可(如果需要,仍可保留其他Java版本作为系统默认版本)。 - ernest_k
1
你应该只使用JAVA_HOME,不要使用符号链接等任何技巧,否则会失败。此外,我不明白为什么你要添加这么多依赖项到maven-compiler-plugin中?除此之外,你应该使用补充的<maven.compiler.release>11</maven.compiler.release>来使用javac的--release开关,以检查JDK9+中的bootclasspath等。我正在一个不需要这样配置的JDK11项目上工作。顺便说一句:如果我没记错的话,已经不支持endorsed目录了(记不清是哪个版本)... - khmarbaise
我在那里有其他依赖项,以便可以利用谷歌的错误敏感性在编译时捕获错误。 - Walter
显示剩余4条评论
2个回答

0
我在属性中加入了这个:<java.version>1.11</java.version>,并且在 Maven 编译插件中以这种方式设置:<source>11</source> <target>11</target>。这对我有用。

0
根据Maven文档:
编译插件用于编译您的项目源代码。自3.0版本以来,如果您使用Java 1.6,则默认编译器为javax.tools.JavaCompiler,并用于编译Java源代码。如果您想要强制插件使用javac,则必须配置插件选项forceJavacCompilerUse。
此外,请注意,目前默认的源设置为1.6,而默认的目标设置为1.6,独立于您使用Maven运行的JDK。我们强烈建议您按照设置Java编译器的-source和-target所述更改这些默认值。
将源和目标更改为11如下所示:
<plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>11</source>
                    <target>11</target>
                </configuration>
            </plugin>

上述提到的无效Java 11版本错误未出现


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