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

Spring Boot 2.5.4升级后Eclipse运行缺失ServletWebServerFactory报错

问题根因排查步骤

1. 检查web容器依赖状态

你项目引入了war插件,默认打war包时Spring Boot会将内置Tomcat的依赖scope标记为provided,仅适配外部容器部署场景,本地main方法启动需要内置Servlet容器依赖可用:

  • 先在build.gradle中强制指定内置容器依赖不被排除:
dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    // 强制内置Tomcat可用于本地运行
    runtimeOnly 'org.springframework.boot:spring-boot-starter-tomcat'
}
  • 检查Eclipse运行配置的参数:打开启动项的Arguments标签,确认Program arguments和VM arguments中没有--spring.main.web-application-type=none这类关闭web容器的配置,有则删除。

2. 清理Eclipse缓存与项目配置

Gradle版本升级后很容易出现Eclipse本地缓存的项目配置不兼容问题,按以下操作重置:

  • 关闭Eclipse,删除项目根目录下的.settings文件夹、.project、.classpath文件
  • 执行./gradlew cleanEclipse eclipse重新生成Eclipse适配的项目配置
  • 若使用Buildship插件管理Gradle项目,先确认Buildship版本支持Gradle 6.9.1,版本过低先升级插件,再右键项目 -> Gradle -> Refresh Gradle Project重新同步依赖
  • 重启Eclipse后再次尝试启动应用

3. 检查gretty插件的影响

你配置了gretty插件指定使用jetty9作为servlet容器,Eclipse运行时可能读取了gretty配置却未加载jetty依赖:

  • 先注释掉build.gradle中gretty插件的引入和相关配置,同步依赖后重启测试
  • 若需要保留gretty,额外添加jetty的starter依赖到runtime范围:
dependencies {
    runtimeOnly 'org.springframework.boot:spring-boot-starter-jetty'
}

4. 修正启动类配置错误

你的启动类存在两处可能影响上下文加载的问题:

  • 继承SpringBootServletInitializer的重写方法中,sources传入的是PyacademyApplication.class,和当前启动类PApplication不一致,属于明显笔误,修正为和当前类一致
  • 本地main方法启动时可手动指定web应用类型,强制走Servlet容器逻辑:
public static void main(String[] args) {
    new SpringApplicationBuilder(PApplication.class)
        .web(WebApplicationType.SERVLET)
        .run(args);
}

5. 对比运行环境差异

打开Eclipse启动配置的Environment标签,对比和命令行执行gradlew appengineRun时的环境变量、JDK版本是否一致,确认jasypt加密密钥、云服务相关配置没有缺失,部分依赖在缺少必要配置时会自动关闭web容器上下文。

内容的提问来源于stack exchange,提问作者Kris Swat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 20:57:03