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

Spring Boot 3启动报错:java.lang.ClassNotFoundException: jakarta.servlet.ServletContext

解决Spring Boot 3.x启动时jakarta/servlet/ServletContext缺失问题

可能的原因及解决方案

1. 检查依赖配置,避免重复或错误引入Servlet API

Spring Boot 3.x的spring-boot-starter-web已内置兼容的Jakarta Servlet依赖,无需单独引入jakarta.servlet:jakarta.servlet-api。手动添加该依赖可能引发版本冲突或scope配置错误。

打开build.gradle做以下调整:

  • 移除手动添加的jakarta.servlet:jakarta.servlet-api依赖,确保仅通过spring-boot-starter-web引入Servlet相关依赖:
    dependencies {
        implementation 'org.springframework.boot:spring-boot-starter-web'
        // 移除类似下面的手动依赖
        // implementation 'jakarta.servlet:jakarta.servlet-api:6.0.0'
    }
    
  • 若因特殊场景需单独引入,需将scope设置为providedRuntime,避免打包时冲突:
    providedRuntime 'jakarta.servlet:jakarta.servlet-api:6.0.0'
    

2. 排查依赖冲突,排除旧的javax.servlet依赖

用Gradle命令分析依赖树,检查是否有旧的javax.servlet相关依赖被间接引入:

./gradlew dependencies

若发现javax.servlet:javax.servlet-api或其他javax包下的servlet依赖,在对应依赖中排除:

dependencies {
    implementation('some-third-party-dependency') {
        exclude group: 'javax.servlet', module: 'javax.servlet-api'
    }
}

3. 确认启动类配置合理性

继承SpringBootServletInitializer是为war包部署到外部容器的场景设计的,若本地直接用main方法启动,无需继承该类,移除后重试:

@SpringBootApplication
public class YourApplication {
    public static void main(String[] args) {
        SpringApplication.run(YourApplication.class, args);
    }
}

若确实需要war包部署,确保Gradle的war插件配置正确:

plugins {
    id 'war'
    id 'org.springframework.boot' version '3.1.3'
    id 'io.spring.dependency-management' version '1.1.3'
}

war {
    archiveBaseName = 'your-app-name'
    archiveVersion = '0.0.1-SNAPSHOT'
}

springBoot {
    mainClass = 'com.yourpackage.YourApplication'
}

4. 清理并重新构建项目

执行以下命令清理缓存、刷新依赖并重新构建:

./gradlew clean build --refresh-dependencies

内容的提问来源于stack exchange,提问作者BHAKTI HIRANI

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 23:29:53