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

Spring Boot Maven项目打jar包运行报错:缺少ServletWebServerFactory bean

问题核心原因

该错误本质是Spring Boot应用运行时找不到内置Servlet Web服务器(默认是Tomcat)的实现类。VS Code本地运行正常是因为IDE会自动加载开发环境依赖,打jar包时对应依赖未被打包进jar包导致缺失。

排查步骤
  • 检查pom.xml打包类型:确认<packaging>标签配置为jar,如果配置为war,要么改为jar,要么选择外置Tomcat部署war包,不要直接用java -jar运行war包。
  • 检查web依赖配置:查看spring-boot-starter-web依赖是否排除了内置Tomcat,且Tomcat依赖被标记为<scope>provided</scope>,provided范围的依赖不会被打进可执行jar包。
  • 检查打包插件配置:确认已经配置了spring-boot-maven-plugin且开启了repackage目标,否则打包生成的是普通jar包,不包含依赖和启动入口。
  • 检查web环境配置:查看application配置文件中是否设置了spring.main.web-application-type=none,或者启动类@SpringBootApplication注解设置了webEnvironment = WebEnvironment.NONE,该配置会禁用web服务器自动启动。
  • 检查自动配置排除项:查看@EnableAutoConfiguration或@SpringBootApplication注解是否排除了ServletWebServerFactoryAutoConfiguration类,这会导致Spring Boot不自动加载Web服务器工厂。
解决方法

方案1:修正依赖配置

如果是内置Tomcat被设置为provided导致缺失,直接移除spring-boot-starter-web的Tomcat排除规则,以及单独的provided范围Tomcat依赖即可:
错误配置示例:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <!-- 移除下面这段exclusion -->
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<!-- 移除下面这段provided范围的tomcat依赖 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>provided</scope>
</dependency>

如果需要同时支持打war包部署外置Tomcat和打可执行jar包,可以保留上述配置,在spring-boot-maven-plugin中添加配置把provided依赖打进jar包:

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <executions>
        <execution>
            <goals>
                <goal>repackage</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <includeSystemScope>true</includeSystemScope>
    </configuration>
</plugin>

方案2:修正web环境配置

如果是主动禁用了web环境,删除对应配置即可:

  1. 删掉application.properties/yml中的spring.main.web-application-type=none配置,或者改为spring.main.web-application-type=servlet
  2. 删掉启动类@SpringBootApplication注解中的webEnvironment = WebEnvironment.NONE属性,或者改为webEnvironment = WebEnvironment.SERVLET
  3. 删掉@EnableAutoConfiguration或@SpringBootApplication注解中对ServletWebServerFactoryAutoConfiguration的排除规则

方案3:修正打包插件配置

确保pom中配置了正确的Spring Boot打包插件,示例如下(版本号要和你使用的Spring Boot版本一致):

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>2.6.13</version>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
验证

修改完成后执行mvn clean package重新打包,再执行java -jar 项目名.jar启动验证即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 04:45:05