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

使用Gradle和Spring Boot如何生成可在Tomcat运行的非内嵌War包?

Spring Boot + Gradle 生成外置Tomcat可部署War包的实现方法

实现脱离Spring Boot内嵌运行、可直接部署到独立Tomcat的War包,核心逻辑很简单:一是把内嵌Web容器的依赖从最终打包范围排除,二是给应用提供外部Servlet容器能识别的启动入口,没有复杂的特殊配置。

具体配置步骤

  • 调整Gradle构建脚本的插件引入
    在项目根目录的build.gradle文件中,补充引入war打包插件,替换原有的纯Jar打包配置:
    plugins {
      id 'org.springframework.boot' version '你的项目对应Spring Boot版本'
      id 'io.spring.dependency-management'
      id 'java'
      id 'war' // 新增War打包插件
    }
    
  • 调整内嵌容器的依赖作用域
    将Spring Boot自带的内嵌Tomcat依赖标记为provided作用域——这类依赖仅在本地编译、调试时可用,不会被打包进最终War文件,避免和外部Tomcat的类加载机制冲突:
    dependencies {
      // 原有Spring MVC、业务相关依赖全部保留即可
      implementation 'org.springframework.boot:spring-boot-starter-web'
      // 新增:标记内嵌Tomcat为编译/调试阶段可用,不打入War包
      providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
    }
    
    如果项目原本使用Undertow、Jetty作为内嵌容器,需要将对应的依赖也改为provided作用域,确保不打进War包,避免类冲突
  • 适配Spring Boot启动类
    原有用@SpringBootApplication标注的启动类,需要继承SpringBootServletInitializer并重写configure方法——这是外部Servlet容器(比如Tomcat)加载Spring应用的标准入口;原本用于本地启动的main方法可以完全保留,不影响日常本地调试运行:
    @SpringBootApplication
    public class WebApplication extends SpringBootServletInitializer {
        // 外部Tomcat部署时的应用入口配置
        @Override
        protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
            return builder.sources(WebApplication.class);
        }
    
        // 保留本地调试用的启动方法即可
        public static void main(String[] args) {
            SpringApplication.run(WebApplication.class, args);
        }
    }
    

打包与部署验证

  • 执行Gradle命令完成打包,跳过单元测试可以加快构建速度:
    gradle clean build -x test
  • 构建完成后,可部署的War包会输出在项目的build/libs/目录下,直接将该文件拷贝到独立Tomcat的webapps目录,启动Tomcat即可正常运行
  • 需要注意版本兼容:Spring Boot 2.x 系列需要搭配Tomcat 9及以上版本,Spring Boot 3.x 系列需要搭配Tomcat 10及以上版本,避免Servlet规范不兼容导致的启动失败。

内容的提问来源于stack exchange,提问作者Igor Leonardo Pereira da Silva

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 16:27:05