使用Cucumber BDD搭建RestAssured框架时遭遇NoSuchMethodError错误
解决RestAssured + Cucumber BDD中的
NoSuchMethodError: isJakartaEEInClassPath()错误 错误根源
这个报错是依赖版本不兼容导致的:ObjectMapperResolver.isJakartaEEInClassPath()是RestAssured较新版本新增的方法,若项目中RestAssured的核心模块与common模块版本不一致,或者引入了冲突的Jakarta EE相关依赖,就会出现找不到方法的情况。你的业务代码本身没有逻辑问题,问题出在依赖配置层面。
具体解决步骤
1. 统一RestAssured所有模块的版本
确保项目中所有RestAssured相关依赖(如rest-assured、json-path、xml-path、rest-assured-common等)使用完全相同的版本,避免版本混用。
Maven示例:
<dependency> <groupId>io.rest-assured</groupId> <artifactId>rest-assured</artifactId> <version>5.4.0</version> <!-- 替换为稳定版,建议使用最新兼容版本 --> <scope>test</scope> </dependency> <dependency> <groupId>io.rest-assured</groupId> <artifactId>json-path</artifactId> <version>5.4.0</version> <scope>test</scope> </dependency> <dependency> <groupId>io.rest-assured</groupId> <artifactId>xml-path</artifactId> <version>5.4.0</version> <scope>test</scope> </dependency>
Gradle示例:
testImplementation 'io.rest-assured:rest-assured:5.4.0' testImplementation 'io.rest-assured:json-path:5.4.0' testImplementation 'io.rest-assured:xml-path:5.4.0'
2. 排查并排除冲突的Jakarta EE依赖
如果项目中引入了Spring Boot、其他测试框架等包含Jakarta EE类的依赖,可能与RestAssured的依赖产生冲突。可以通过依赖分析命令找出冲突项:
- Maven:执行
mvn dependency:tree查看依赖树 - Gradle:执行
gradle dependencies查看依赖树
找到冲突的Jakarta EE相关依赖后,在对应依赖中排除冲突模块。例如Maven中排除:
<dependency> <groupId>冲突依赖的groupId</groupId> <artifactId>冲突依赖的artifactId</artifactId> <exclusions> <exclusion> <groupId>jakarta.servlet</groupId> <artifactId>jakarta.servlet-api</artifactId> </exclusion> </exclusions> </dependency>
3. 清理依赖缓存
本地仓库的依赖缓存可能损坏,导致版本匹配异常,执行以下命令清理并重新拉取依赖:
- Maven:
mvn clean install -U - Gradle:
gradle clean build --refresh-dependencies
4. 验证Cucumber与RestAssured版本兼容性
确保使用的Cucumber版本与RestAssured版本兼容,比如Cucumber 7.x系列可兼容RestAssured 5.x系列,避免框架版本差异导致的间接依赖冲突。
内容的提问来源于stack exchange,提问作者nikhil udgirkar
相关产品推荐
相关产品推荐

