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

如何创建内置Tomcat的Spring MVC Gradle项目可独立运行War包

最优实现方案:基于Spring Boot内嵌Tomcat构建可执行War包

嘿,这个需求我帮不少开发者落地过,用Spring Boot的内嵌Tomcat支持是最简洁靠谱的方案——既能保留你现有Spring MVC项目的核心逻辑,又能实现无需预装Gradle/Tomcat、直接用java -jar启动的目标,甚至还能灵活指定端口。咱们一步步来:

1. 调整Gradle构建配置(build.gradle)

首先要引入Spring Boot插件,它会自动帮你处理内嵌Tomcat的依赖打包、可执行War的构建逻辑:

plugins {
    id 'java'
    id 'war'
    // 引入Spring Boot插件,版本选和你Spring MVC兼容的(比如2.x或3.x)
    id 'org.springframework.boot' version '3.2.0'
    id 'io.spring.dependency-management' version '1.1.4'
}

// 指定项目的JDK版本,根据你的环境调整
java {
    sourceCompatibility = '17'
    targetCompatibility = '17'
}

// 依赖配置:替换原有Tomcat依赖,改用Spring Boot的starter-web(自动包含内嵌Tomcat)
dependencies {
    // 保留你的原有Spring MVC、业务逻辑依赖
    implementation 'org.springframework:spring-webmvc:6.1.1'
    
    // Spring Boot starter-web,自动引入内嵌Tomcat和必要的Web依赖
    implementation 'org.springframework.boot:spring-boot-starter-web'
    
    // 可选:如果需要将War部署到外部Tomcat,添加此依赖
    providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
}

// 配置可执行War的主类
springBoot {
    mainClass = 'com.yourpackage.YourApplication'
}

2. 添加Spring Boot启动类(兼容现有Spring MVC)

新增一个启动类,它既是java -jar的入口,也能兼容传统War部署的需求:

package com.yourpackage;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.context.annotation.ImportResource;

// 如果你用XML配置Spring MVC,用@ImportResource引入配置文件
@ImportResource("classpath:spring-mvc-config.xml")
// 如果你用Java配置,直接@Import你的配置类即可
// @Import(YourSpringMvcConfig.class)
@SpringBootApplication
public class YourApplication extends SpringBootServletInitializer {

    public static void main(String[] args) {
        // 启动内嵌Tomcat服务器
        SpringApplication.run(YourApplication.class, args);
    }

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        // 兼容外部Tomcat部署的逻辑
        return application.sources(YourApplication.class);
    }
}

3. 打包与运行

  • 打包:在项目根目录执行./gradlew bootWar(Windows用gradlew.bat bootWar),打包后的War包会生成在build/libs目录下。这个包已经包含了所有依赖(包括内嵌Tomcat),无需预装任何工具。
  • 运行:直接执行java -jar build/libs/your-app-name.war,服务会默认在8080端口启动。如果要指定端口,加上参数即可:
    java -jar build/libs/your-app-name.war --server.port=8081
    

为什么这是最优方案?

  • 兼容性强:既支持独立运行(java -jar),也能像传统War一样部署到外部Tomcat,灵活满足不同场景。
  • 零依赖预装:打包后的War包含了所有必要的依赖(包括Tomcat),用户只需要有JRE就能运行。
  • 配置简洁:Spring Boot自动处理了大部分内嵌服务器的配置,无需手动编写复杂的启动脚本。
  • 生态成熟:Spring Boot的内嵌Tomcat支持经过大量生产环境验证,稳定性有保障。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 15:27:52