尝试使用maven工具链编译Java 17项目,而我的活动jdk是JDK8。我设置了我的工具链,以便他们使用 JDK17 来编译它,并且在运行测试时编译失败并出现错误:
Execution default-test of goal org.apache.maven.plugins:maven-surefire-plugin:3.0.0-M7:test failed: java.lang.UnsupportedClassVersionError: my/source/ControllerTest has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 52.0.
我的pom工具链配置编译器和surefire插件(版本M7):
<properties>
.....
<toolchain>17</toolchain>
<vendor>oracle</vendor>
</properties>
....
....
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-toolchains-plugin</artifactId>
<configuration>
<jdkToolchain>
<version>${toolchain}</version>
<vendor>${vendor}</vendor>
</jdkToolchain>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<jdkToolchain>
<version>${toolchain}</version>
<vendor>${vendor}</vendor>
</jdkToolchain>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<jdkToolchain>
<version>${toolchain}</version>
<vendor>${vendor}</vendor>
</jdkToolchain>
<argLine>@{surefireArgLine}</argLine>
<forkCount>1</forkCount>
<reuseForks>false</reuseForks>
<argLine>-Xmx1024m -XX:MaxPermSize=256m</argLine>
<includes>
<include>**/**Test.java</include>
</includes>
</config>
为什么我的工具链配置没有被 Surefire 拾取。编译本身没问题,但万无一失的测试阶段失败了。感谢您的帮助
如果我在 Surefire 插件 2.22 上使用“mvn test”触发测试,我就能使工具链正常工作。但如果使用 Surefire:test 触发测试,它不会获取工具链。
我一直在尝试让它在 Surefire 3 上工作,但我一直遇到你发布的同样的问题。如果您找到了在 Surefire 3 中使用此功能的方法,也请告诉我。
尝试删除
forkCount
选项,它似乎会破坏工具链查找。
问题跟踪器中有一些与此相关的问题:https://issues.apache.org/jira/browse/SUREFIRE-720?jql=text%20~%20%22forkCount%20toolchain%22