升级JUnit Jupiter至5.12.1后测试发现失败的问题求助
升级JUnit Jupiter至5.12.1后测试发现失败的问题求助
我最近把JUnit从5.11.4升级到5.12.1之后,Java项目的测试突然跑不起来了,抛出了下面的异常:
Mär 31, 2025 1:34:48 PM org.junit.platform.launcher.core.DefaultLauncher handleThrowable WARNUNG: TestEngine with ID 'junit-jupiter' failed to discover tests org.junit.platform.commons.JUnitException: OutputDirectoryProvider not available; probably due to unaligned versions of the junit-platform-engine and junit-platform-launcher jars on the classpath/module path. at org.junit.platform.engine.EngineDiscoveryRequest.getOutputDirectoryProvider(EngineDiscoveryRequest.java:94) at org.junit.jupiter.engine.JupiterTestEngine.discover(JupiterTestEngine.java:67) at org.junit.platform.launcher.core.DefaultLauncher.discoverEngineRoot(DefaultLauncher.java:168) at org.junit.platform.launcher.core.DefaultLauncher.discoverRoot(DefaultLauncher.java:155) at org.junit.platform.launcher.core.DefaultLauncher.discover(DefaultLauncher.java:120) at org.apache.maven.surefire.junitplatform.TestPlanScannerFilter.accept(TestPlanScannerFilter.java:56) at org.apache.maven.surefire.util.DefaultScanResult.applyFilter(DefaultScanResult.java:102) at org.apache.maven.surefire.junitplatform.JUnitPlatformProvider.scanClasspath(JUnitPlatformProvider.java:143) at org.apache.maven.surefire.junitplatform.JUnitPlatformProvider.invoke(JUnitPlatformProvider.java:124) at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:384) at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:345) at org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:126) at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:418)
我的pom.xml里配置的JUnit依赖是这样的:
<dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-api</artifactId> <version>5.12.1</version> <scope>test</scope> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <version>5.12.1</version> <scope>test</scope> </dependency>
另外,maven-surefire-plugin和maven-failsafe-plugin作为插件集成在项目里,版本都是2.22.2。
我特意用Maven生成了依赖树检查,没发现任何junit-jupiter相关的版本冲突:
[INFO] +- org.slf4j:slf4j-api:jar:2.0.17:compile [INFO] +- ch.qos.logback:logback-classic:jar:1.3.15:compile [INFO] | +- (ch.qos.logback:logback-core:jar:1.3.15:compile - omitted for duplicate) [INFO] | \- (org.slf4j:slf4j-api:jar:2.0.7:compile - omitted for conflict with 2.0.17) [INFO] +- ch.qos.logback:logback-core:jar:1.3.15:compile [INFO] +- org.projectlombok:lombok:jar:1.18.36:provided [INFO] +- org.apache.maven.plugins:maven-compiler-plugin:jar:3.14.0:compile [INFO] | +- org.apache.maven.shared:maven-shared-utils:jar:3.4.2:compile [INFO] | | +- (org.slf4j:slf4j-api:jar:1.7.36:compile - omitted for conflict with 2.0.17) [INFO] | | \- commons-io:commons-io:jar:2.11.0:compile [INFO] | +- org.apache.maven.shared:maven-shared-incremental:jar:1.1:compile [INFO] | +- org.codehaus.plexus:plexus-java:jar:1.4.0:compile [INFO] | | +- org.ow2.asm:asm:jar:9.7.1:compile [INFO] | | \- com.thoughtworks.qdox:qdox:jar:2.2.0:compile [INFO] | +- org.codehaus.plexus:plexus-compiler-api:jar:2.15.0:compile [INFO] | | +- (org.codehaus.plexus:plexus-utils:jar:4.0.0:compile - omitted for conflict with 4.0.1) [INFO] | | \- (org.slf4j:slf4j-api:jar:1.7.36:compile - omitted for conflict with 2.0.17) [INFO] | +- org.codehaus.plexus:plexus-compiler-manager:jar:2.15.0:compile [INFO] | | +- (org.codehaus.plexus:plexus-compiler-api:jar:2.15.0:compile - omitted for duplicate) [INFO] | | +- javax.inject:javax.inject:jar:1:compile [INFO] | | +- (org.slf4j:slf4j-api:jar:1.7.36:compile - omitted for conflict with 2.0.17) [INFO] | | \- org.codehaus.plexus:plexus-xml:jar:3.0.0:compile [INFO] | +- org.codehaus.plexus:plexus-compiler-javac:jar:2.15.0:runtime [INFO] | | +- (org.codehaus.plexus:plexus-utils:jar:4.0.0:runtime - omitted for conflict with 4.0.1) [INFO] | | +- (javax.inject:javax.inject:jar:1:runtime - omitted for duplicate) [INFO] | | +- (org.slf4j:slf4j-api:jar:1.7.36:runtime - omitted for conflict with 2.0.17) [INFO] | | \- (org.codehaus.plexus:plexus-compiler-api:jar:2.15.0:runtime - omitted for duplicate) [INFO] | \- org.codehaus.plexus:plexus-utils:jar:4.0.1:compile [INFO] +- jakarta.xml.bind:jakarta.xml.bind-api:jar:2.3.3:compile [INFO] | \- jakarta.activation:jakarta.activation-api:jar:1.2.2:compile [INFO] +- javax.activation:activation:jar:1.1:compile [INFO] +- org.glassfish.jaxb:jaxb-runtime:jar:2.3.9:compile [INFO] | +- (jakarta.xml.bind:jakarta.xml.bind-api:jar:2.3.3:compile - omitted for duplicate) [INFO] | +- org.glassfish.jaxb:txw2:jar:2.3.9:compile [INFO] | +- com.sun.istack:istack-commons-runtime:jar:3.0.12:compile [INFO] | \- com.sun.activation:jakarta.activation:jar:1.2.2:runtime [INFO] +- org.junit.jupiter:junit-jupiter-api:jar:5.12.1:test [INFO] | +- org.opentest4j:opentest4j:jar:1.3.0:test [INFO] | +- org.junit.platform:junit-platform-commons:jar:1.12.1:test [INFO] | | \- (org.apiguardian:apiguardian-api:jar:1.1.2:test - omitted for duplicate) [INFO] | \- org.apiguardian:apiguardian-api:jar:1.1.2:test [INFO] +- org.junit.jupiter:junit-jupiter-engine:jar:5.12.1:test [INFO] | +- org.junit.platform:junit-platform-engine:jar:1.12.1:test [INFO] | | +- (org.opentest4j:opentest4j:jar:1.3.0:test - omitted for duplicate) [INFO] | | +- (org.junit.platform:junit-platform-commons:jar:1.12.1:test - omitted for duplicate) [INFO] | | \- (org.apiguardian:apiguardian-api:jar:1.1.2:test - omitted for duplicate) [INFO] | +- (org.junit.jupiter:junit-jupiter-api:jar:5.12.1:test - omitted for duplicate) [INFO] | \- (org.apiguardian:apiguardian-api:jar:1.1.2:test - omitted for duplicate) [INFO] \- org.apache.commons:commons-lang3:jar:3.17.0:compile
切回junit-jupiter 5.11.4版本之后,所有测试又能正常运行了。我当前使用的Java版本是1.8.0_302,Maven版本是3.9.9。而且在5.11.4版本下所有测试类都能被正常扫描到,所以类名的命名规范应该是没问题的。
有没有大佬能给我点建议,帮我解决这个问题?我知道网上有很多类似的报错案例,但我实在没找出哪里存在版本冲突。
备注:内容来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

