Spring Boot应用Eclipse中Gradle bootRun启动异常求助
我之前也踩过这个一模一样的坑!这个错误的核心原因是Servlet API版本冲突——Spring Boot的嵌入式Tomcat依赖的是Servlet 3.0+规范的API,但你的项目里肯定混入了更低版本的javax.servlet-api(比如2.5或更早),或者有第三方依赖悄悄引入了旧版Servlet Jar包,导致JVM加载了错误的ServletContext类,找不到getClassLoader()方法。
下面是我亲测有效的解决步骤:
1. 检查并规范Gradle依赖配置
首先确保你的build.gradle里只通过Spring Boot Starter引入Web依赖,不要手动添加低版本的Servlet API:
plugins { id 'org.springframework.boot' version '2.7.14' // 替换成你正在使用的稳定版本 id 'io.spring.dependency-management' version '1.0.15.RELEASE' id 'java' } dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' // 绝对不要手动添加类似 compile 'javax.servlet:javax.servlet-api:2.5' 的依赖! }
2. 强制统一Servlet API版本
在dependencyManagement块里明确指定Servlet API的版本,确保所有依赖都使用这个版本:
dependencyManagement { imports { mavenBom org.springframework.boot.gradle.plugin.SpringBootPlugin.BOM_COORDINATES } dependencies { dependency 'javax.servlet:javax.servlet-api:4.0.1' // 对应你Spring Boot版本的兼容版本 } }
3. 排查并排除冲突依赖
用Gradle命令生成依赖树,找出哪个第三方依赖引入了旧版Servlet API:
./gradlew dependencies --configuration compileClasspath | grep servlet-api
找到冲突的依赖后,在引入它时排除旧版Servlet API,比如:
implementation('com.example:old-library:1.0.0') { exclude group: 'javax.servlet', module: 'servlet-api' }
4. 修复Eclipse项目配置问题
有时候Eclipse的动态Web项目配置会自动加入旧版Tomcat的Servlet API,干扰Gradle的依赖管理:
- 右键项目 → Properties → Java Build Path → Libraries
- 找到Tomcat相关的库或手动添加的Servlet API库,点击移除
- 执行
./gradlew eclipse重新生成Eclipse项目配置,确保使用Gradle管理的依赖
5. 清理缓存并重启
最后清理项目缓存和Eclipse缓存,避免残留问题:
- 执行Gradle命令:
./gradlew clean build --refresh-dependencies - 在Eclipse中点击Project → Clean,然后重启Eclipse
异常信息回顾:
org.springframework.context.ApplicationContextException: Unable to start embedded container; nested exception is java.lang.NoSuchMethodError: javax.servlet.ServletContext.getClassLoader()Ljava/lang/ClassLoader;
内容的提问来源于stack exchange,提问作者Aravind Raghu

