Spring boot 应用程序 2.1.7.RELEASE 的 Junit 5 测试用例构建失败,并在 intelij 中出现以下错误。
[错误]无法在项目域上执行目标org.apache.maven.plugins:maven-surefire-plugin:2.22.2:测试(默认测试):执行目标org.apache.maven.plugins的默认测试: maven-surefire-plugin:2.22.2:测试失败:不支持的类文件主要版本 56 -> [帮助 1]
使用java 9模块化
应用程序在 Maven 中构建,无需测试用例即可运行。
使用maven Surefire插件版本2.22.1 在命令行和 intellij 中失败
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<useSystemClassLoader>false</useSystemClassLoader>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<jvmArguments>--add-modules=java.xml.ws.annotation</jvmArguments>
</configuration>
</plugin>
从错误日志中可以看到子模块使用的是maven-surefire-plugin 2.22.2 解决方案是定义所有模块使用的 Maven 插件版本,将此部分添加到主 pom.xml 中:
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.1.2</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<release>12</release>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
我可以在删除Oracle依赖后编译它,我不知道你是否需要这样做。如果它对您有用,请在问题中发表评论。
这是由于maven-surefire-plugin依赖的
asm
旧版本导致的。
如果您使用
mvn test-X
运行 Maven 构建,您应该会看到该插件使用了 6.x 版本的 asm。
旧版本无法在较新的字节代码上使用反射,独立于执行运行时,这实际上是导致该问题的原因。
试试这个,这对我有用:
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.2</version>
<dependencies>
<dependency>
<groupId>org.ow2.asm</groupId>
<artifactId>asm</artifactId>
<version>7.3.1</version>
</dependency>
</dependencies>
</plugin>
您可能需要将其添加到父pom的依赖管理配置中,以确保它正确应用于所有子项目。
Maven 构建中执行的 JVM 并不是您想象的那样。您需要 Java 12 来执行编译后的代码,并且由于某种原因 Maven 使用 Java 11。