Java11升17+JUnit4转JUnit5出现NoSuchMethodError求助
JUnit5升级后NoSuchMethodError问题解决
你遇到的NoSuchMethodError根源是JUnit Platform组件版本不一致:从依赖树可以看到,junit-platform-launcher使用了1.10.1版本,但junit-platform-engine和junit-platform-commons是1.9.1版本。JUnit Jupiter 5.9.1对应的JUnit Platform版本必须是1.9.1,版本不匹配会导致高版本launcher调用低版本engine中不存在的方法(比如这里的getAncestors())。
解决步骤
1. 手动统一JUnit Platform版本
将junit-platform-launcher的版本改为1.9.1,和其他Platform组件版本保持一致:
<dependency> <groupId>org.junit.platform</groupId> <artifactId>junit-platform-launcher</artifactId> <version>1.9.1</version> <scope>test</scope> <!-- 测试依赖建议使用test scope,避免污染主代码 --> </dependency>
2. 推荐:使用JUnit BOM统一管理版本(更可靠)
在Maven的dependencyManagement中导入JUnit BOM,自动同步所有JUnit相关依赖的版本,避免手动维护出错:
<dependencyManagement> <dependencies> <dependency> <groupId>org.junit</groupId> <artifactId>junit-bom</artifactId> <version>5.9.1</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
之后你的测试依赖可以去掉版本号,BOM会自动匹配正确版本:
<dependencies> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-api</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-params</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.junit.platform</groupId> <artifactId>junit-platform-launcher</artifactId> <scope>test</scope> </dependency> <!-- Spring Test等其他依赖保持不变 --> </dependencies>
3. 清理缓存并重新构建
修改依赖后,执行Maven命令清理缓存并重新构建,确保依赖正确加载:
mvn clean install -U
内容的提问来源于stack exchange,提问作者CCardozo
相关产品推荐
相关产品推荐

