Spring Boot从1.15迁移到2.5.8后出现NoSuchMethodError问题求助
解决思路
1. 排查Servlet API依赖冲突
- 执行依赖分析命令,找出项目中是否存在低版本的
javax.servlet-api(比如3.x版本):
Gradle项目使用:
Maven项目使用:./gradlew dependencies | grep servlet-apimvn dependency:tree | grep servlet-api - 如果查到低版本依赖,找到引入它的模块,在build.gradle中排除该依赖,示例:
Spring Boot的依赖管理会自动维护正确的Servlet API版本(4.0.x及以上),无需手动指定。implementation('依赖组ID:依赖名称') { exclude group: 'javax.servlet', module: 'javax.servlet-api' }
2. 检查嵌入式容器版本匹配
Spring Boot 2.5.8默认使用Tomcat 9.0.x,该版本对应Servlet 4.0,刚好支持getHttpServletMapping()方法。如果项目自定义了容器版本或切换到其他容器,需确保版本兼容:
- 自定义Tomcat版本需≥9.0;
- 使用Jetty需确保版本≥9.4.x;
- 使用Undertow需确保版本≥2.0.x。
3. 确认Spring Boot依赖管理生效
检查build.gradle中是否正确配置插件:
plugins { id 'org.springframework.boot' version '2.5.8' id 'io.spring.dependency-management' version '1.0.11.RELEASE' id 'java' }
如果之前手动指定过servlet-api版本,直接删除,让依赖管理自动控制版本。
4. 清理构建缓存避免依赖残留
- 清理Gradle/Maven缓存并重新构建:
Gradle:
Maven:./gradlew clean build --refresh-dependenciesmvn clean install -U - 同时清理IDE缓存(比如IDEA中选择
File → Invalidate Caches / Restart),确保依赖重新加载。
5. 排查第三方依赖兼容性
部分老旧第三方库可能硬依赖低版本Servlet API,且错误设置依赖范围为compile导致冲突。逐个检查项目中的第三方依赖,尤其是迁移后新增或未更新的库,替换为兼容Spring Boot 2.5.x的版本。
内容的提问来源于stack exchange,提问作者anil reddy
相关产品推荐
相关产品推荐

