引入Spring Cloud Config后类路径冲突引发NoSuchMethodError如何解决
解决方案
- 方案1(最推荐):排除eureka-client传递引入的老旧
jsr311-api依赖
直接修改pom.xml中eureka-client的依赖配置,添加排除规则:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> <exclusions> <exclusion> <groupId>javax.ws.rs</groupId> <artifactId>jsr311-api</artifactId> </exclusion> </exclusions> </dependency>
- 方案2:通过依赖管理统一声明高版本jax-rs实现优先级
如果你项目中需要兼容javax.ws.rs相关逻辑,可以在pom的<dependencyManagement>节点中统一指定jakarta.ws.rs-api的版本,确保其优先级高于传递引入的低版本jsr311-api:
<dependencyManagement> <dependencies> <!-- 统一指定jakarta.ws.rs版本,优先级高于传递依赖 --> <dependency> <groupId>jakarta.ws.rs</groupId> <artifactId>jakarta.ws.rs-api</artifactId> <version>2.1.6</version> </dependency> </dependencies> </dependencyManagement>
- 验证操作
配置修改完成后,执行mvn dependency:tree命令,检查项目依赖树中是否还存在1.1.1版本的jsr311-api,确认排除成功后重启应用即可解决报错。
Spring Cloud 2020.0.x版本对应的Spring Boot基线版本为2.4.x/2.5.x,该版本体系默认仍使用javax命名空间,若你的项目已经提前迁移到jakarta命名空间,需要全局排查所有传递引入的javax.*旧规范包,统一做排除处理避免同类冲突。
内容的提问来源于stack exchange,提问作者Sufie
相关产品推荐
相关产品推荐

