当前位置: 首页 > 知识库问答 >
问题:

在JMPS模块化应用程序中运行Spring Boot测试代码时出错

岳迪
2023-03-14

我试图使用Java9中引入的JMPS创建一个模块化的Spring Boot示例。

目前,我为测试工作创建了一个独立的Maven模块。

module greeting.webapp.test {
    requires greeting.webapp;
    requires spring.test;
    requires spring.boot;
    requires spring.web;
    requires spring.boot.starter.webflux;
    requires spring.boot.starter.test;
    requires spring.boot.test;
    requires spring.boot.test.autoconfigure;
    requires org.junit.jupiter;
    requires org.junit.jupiter.api;
    requires org.junit.jupiter.params;
    requires org.junit.jupiter.engine;
    requires org.junit.platform.commons;
    requires org.assertj.core;
    requires mockito.junit.jupiter;
}
Exception in thread "main" java.lang.IllegalAccessError: class org.junit.platform.launcher.TestIdentifier (in unnamed module @0x6325a3ee) cannot access class org.junit.platform.commons.util.Preconditions (in module org.junit.platform.commons) because module org.junit.platform.commons does not export org.junit.platform.commons.util to unnamed module @0x6325a3ee
    at org.junit.platform.launcher.TestIdentifier.from(TestIdentifier.java:56)
    at com.intellij.junit5.JUnit5IdeaTestRunner.<clinit>(JUnit5IdeaTestRunner.java:86)
    at java.base/java.lang.Class.forName0(Native Method)
    at java.base/java.lang.Class.forName(Class.java:377)
    at com.intellij.rt.junit.JUnitStarter.getAgentClass(JUnitStarter.java:230)
    at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:210)
    at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:53)

共有1个答案

麻和雅
2023-03-14

没有简单的方法,或者根本没有好的方法,伊霍。

您遇到的问题是没有正确配置maven surefire。你可以试一下--我试过了,但不知怎么的很不幸,但我并没有投入太多的时间让它奏效(我也不认为那会奏效,但那是一个不同的问题)。相反,我通过以下方式手动配置了surefire插件:

            <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>3.0.0-M5</version>
            <configuration>
                <argLine>
                    --add-exports org.junit.platform.commons/org.junit.platform.commons.util=ALL-UNNAMED
                    --add-exports org.junit.platform.commons/org.junit.platform.commons.logging=ALL-UNNAMED
                </argLine>
            </configuration>
        </plugin>

总的来说,我更喜欢gradle方法。你可以在这里读到我的经验。我也不认为IDEs(在我的例子中是intellij)有足够的支持来运行单个(基于maven的项目)测试,这与Gradle不同。但是,公平地说,我只是试着对付你的回购,到目前为止...

您还可以了解到gradle在需要声明模块时所采用的一种非常简洁的方法,以及它们的专用插件。

 类似资料: