【发布时间】: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 添加了许多依赖项?除此之外,您应该使用补充
<maven.compiler.release>11</maven.compiler.release>来使用 javac 的--release开关来检查 JDK9+ 中的引导类路径等。我正在开发一个不需要此类配置的 JDK11 项目。顺便说一句:如果我没记错的话,不再支持背书目录(不记得哪些版本)......