You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot从1.15迁移到2.5.8后出现NoSuchMethodError问题求助

解决思路

1. 排查Servlet API依赖冲突

  • 执行依赖分析命令,找出项目中是否存在低版本的javax.servlet-api(比如3.x版本):
    Gradle项目使用:
    ./gradlew dependencies | grep servlet-api
    
    Maven项目使用:
    mvn dependency:tree | grep servlet-api
    
  • 如果查到低版本依赖,找到引入它的模块,在build.gradle中排除该依赖,示例:
    implementation('依赖组ID:依赖名称') {
        exclude group: 'javax.servlet', module: 'javax.servlet-api'
    }
    
    Spring Boot的依赖管理会自动维护正确的Servlet API版本(4.0.x及以上),无需手动指定。

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:
    ./gradlew clean build --refresh-dependencies
    
    Maven:
    mvn clean install -U
    
  • 同时清理IDE缓存(比如IDEA中选择File → Invalidate Caches / Restart),确保依赖重新加载。

5. 排查第三方依赖兼容性

部分老旧第三方库可能硬依赖低版本Servlet API,且错误设置依赖范围为compile导致冲突。逐个检查项目中的第三方依赖,尤其是迁移后新增或未更新的库,替换为兼容Spring Boot 2.5.x的版本。

内容的提问来源于stack exchange,提问作者anil reddy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 15:54:17