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

如何配置Maven使Tomcat仅本地运行包含,打包WAR时排除?

解决Spring Boot本地运行含Tomcat、WildFly打包WAR排除Tomcat的配置

1. 配置Maven依赖与Profiles

在pom.xml中通过Maven Profile区分本地开发和WildFly打包场景,实现Tomcat依赖的按需引入:

<!-- 基础Spring Boot Web依赖,先排除默认内置Tomcat -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
    </exclusions>
</dependency>

<!-- 单独声明Tomcat依赖,默认scope为provided(打包WildFly WAR时不包含) -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>provided</scope>
</dependency>

<!-- 配置Maven Profiles -->
<profiles>
    <profile>
        <id>local</id>
        <activation>
            <!-- 默认激活本地Profile,IDE运行、mvn spring-boot:run自动生效 -->
            <activeByDefault>true</activeByDefault>
        </activation>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-tomcat</artifactId>
                <scope>compile</scope>
            </dependency>
        </dependencies>
    </profile>
    <profile>
        <id>wildfly</id>
        <!-- 打包时通过-Pwildfly手动激活,或设置条件自动激活 -->
    </profile>
</profiles>

<!-- 确保打包类型为WAR -->
<packaging>war</packaging>

2. 调整Spring Boot启动类

因为是WAR包部署,启动类需要继承SpringBootServletInitializer,保证WildFly能正确加载应用:

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;

@SpringBootApplication
public class YourAppApplication extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(YourAppApplication.class);
    }

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

3. 运行与打包操作

  • 本地运行:直接在IDE中启动main方法,或执行mvn spring-boot:run,此时local Profile默认激活,Tomcat依赖会被引入,不会出现ServletWebServerFactory缺失错误。
  • 构建WildFly WAR包:执行mvn clean package -Pwildfly,此时wildfly Profile激活,Tomcat依赖保持provided状态,打包后的WAR包不包含Tomcat,可直接部署到WildFly。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 02:21:08