spring-boot-starter-web 3.0.1依赖spring-core 5.3.23引发方法找不到问题求助
解决Spring Boot 3.0.1的NoSuchMethodError依赖冲突问题
错误信息
Exception in thread "main" java.lang.NoSuchMethodError: 'org.springframework.core.io.support.SpringFactoriesLoader org.springframework.core.io.support.SpringFactoriesLoader.forDefaultResourceLocation(java.lang.ClassLoader)'
问题分析
spring-boot-starter-web:3.0.1 要求依赖的spring-core版本为6.0.1及以上,但当前依赖层级中出现了低版本的spring-core:5.3.23,而forDefaultResourceLocation方法是Spring 6.x新增的,同时你使用的JDK17也仅支持Spring 6.x及以上版本,这就导致了方法找不到的错误。
解决步骤
定位冲突依赖来源
使用构建工具命令找出是哪个依赖引入了spring-core:5.3.23:- Maven:
mvn dependency:tree -Dverbose -Dincludes=org.springframework:spring-core - Gradle:
gradle dependencies --configuration compileClasspath | grep spring-core
- Maven:
排除旧版依赖
在引入冲突依赖的节点中,手动排除低版本的spring-core:
Maven示例:<dependency> <!-- 替换为实际引入旧版spring-core的依赖坐标 --> <groupId>com.example</groupId> <artifactId>conflicting-dependency</artifactId> <version>x.x.x</version> <exclusions> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> </exclusion> </exclusions> </dependency>Gradle示例:
implementation('com.example:conflicting-dependency:x.x.x') { exclude group: 'org.springframework', module: 'spring-core' }强制锁定spring-core版本
如果排查排除过程繁琐,可以直接在依赖管理中强制指定spring-core为6.0.1及以上版本:
Maven示例(添加到dependencyManagement节点):<dependencyManagement> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>6.0.1</version> </dependency> </dependencies> </dependencyManagement>Gradle示例:
configurations.all { resolutionStrategy.force 'org.springframework:spring-core:6.0.1' }统一Spring版本
检查项目中所有Spring相关依赖,确保没有混合使用Spring 5.x和6.x的组件,所有依赖版本需与Spring Boot 3.0.1的版本兼容。
内容的提问来源于stack exchange,提问作者devoverflow
相关产品推荐
相关产品推荐

