对于 Junit 5 测试用例,Maven Surefire 插件 2.22.2 构建失败,并出现错误:Spring Boot 中不支持类文件主要版本 56

问题描述 投票:0回答:3

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>
java maven junit5 spring-boot-maven-plugin openjdk-12
3个回答
3
投票

从错误日志中可以看到子模块使用的是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依赖后编译它,我不知道你是否需要这样做。如果它对您有用,请在问题中发表评论。


1
投票

这是由于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的依赖管理配置中,以确保它正确应用于所有子项目。


0
投票

Maven 构建中执行的 JVM 并不是您想象的那样。您需要 Java 12 来执行编译后的代码,并且由于某种原因 Maven 使用 Java 11。

© www.soinside.com 2019 - 2024. All rights reserved.