Spring Boot + Java 模块 = 不支持的类文件主要版本

Jan*_*wak 2 java spring maven spring-boot

我有一个奇怪的问题,mvn clean test只有当我尝试module-info.java使用 Spring Boot 添加到我的项目时才会失败。\n项目结构非常简单

\n
\n\n \xe2\x94\x82 pom.xml\n \xe2\x94\x82\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80.idea\ n \xe2\x94\x82 .gitignore\n \xe2\x94\x82 编译器.xml\n \xe2\x94\x82 编码.xml\n \xe2\x94\x82 jarRepositories.xml\n \xe2\x94\x82 Misc.xml\n \xe2\x94\x82 工作空间.xml\n \xe2\x94\x82\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80src\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80main\n \xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 \xe2\x94\x80java\n \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 module-info.java\n \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\ x82\n \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80com\n \xe2\x94\x82 \xe2\ x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80test\n \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\ x94\x80\xe2\x94\x80资源\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80test\n \xe2\x94\x9c\xe2\x94\x80\ xe2\x94\x80\xe2\x94\x80java\n \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80com\n \xe2\x94\ x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80test\n \xe2\x94\x82 SomeTest.java\n \xe2\x94\x82\n \xe2\x94 \x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80 资源\n\n
\n

SomeTest.java很简单

\n
\nimport org.junit.jupiter.api.Assertions;\nimport org.junit.jupiter.api.Test;\n\npublic class SomeTest {\n    @Test\n    public void test() {\n        var isTrue = true;\n        Assertions.assertTrue(isTrue);\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

module-info.java还:

\n
open module com.test {\n}\n
Run Code Online (Sandbox Code Playgroud)\n

pom.xml文件取自 sprint initalizr

\n
<?xml version="1.0" encoding="UTF-8"?>\n<project xmlns="http://maven.apache.org/POM/4.0.0"\n         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\n         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">\n    <parent>\n        <groupId>org.springframework.boot</groupId>\n        <artifactId>spring-boot-starter-parent</artifactId>\n        <version>2.5.5</version>\n        <relativePath/> <!-- lookup parent from repository -->\n    </parent>\n    <modelVersion>4.0.0</modelVersion>\n    <groupId>com.test</groupId>\n    <artifactId>SampleTest</artifactId>\n    <version>1.0.0-SNAPSHOT</version>\n    <properties>\n        <java.version>17</java.version>\n    </properties>\n    <dependencies>\n        <dependency>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-starter</artifactId>\n        </dependency>\n    \n        <dependency>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-starter-test</artifactId>\n            <scope>test</scope>\n        </dependency>\n    </dependencies>\n    \n    <build>\n        <plugins>\n            <plugin>\n                <groupId>org.springframework.boot</groupId>\n                <artifactId>spring-boot-maven-plugin</artifactId>\n            </plugin>\n        </plugins>\n    </build>\n</project>\n
Run Code Online (Sandbox Code Playgroud)\n

现在奇怪的是,当module-info.java文件存在时mvn clean test失败\n不支持的类文件主要版本 61

\n
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.22.2:test (default-test) on project SampleTest: Execution default-test of goal org.apache.maven.plugins:maven-surefire-plugin:2.22.2:test failed: Unsupported class file major version 61 -> [Help 1]\n
Run Code Online (Sandbox Code Playgroud)\n

但是当我删除时module-info.java,一切都会没有错误。有什么想法如何使用 Spring Boot 实现 java 模块吗?:)

\n

khm*_*ise 5

您必须覆盖使用的 maven-surefire-plugin 版本,因为 spring boot Parent 定义的版本太旧。

<build>
    <pluginManagement>
        <plugins>
            <plugin>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>3.0.0-M5</version>
            </plugin>
        </plugins>
    </pluginManagement>
...
Run Code Online (Sandbox Code Playgroud)

  • 这就是窍门!谢谢你!:) (2认同)