引言
在多环境开发中,我们经常需要根据部署环境来改变 Spring Boot 应用的打包方式。本文将探讨如何使用 Maven Profiles 结合依赖排除来动态地切换 JAR 和 WAR 打包配置。
1. 修改 pom.xml 以支持 WAR 包
 
转换 Spring Boot 应用从 JAR 到 WAR 时,首先需要在 pom.xml 中进行一些基本调整:
-  
修改 Spring Boot Starter:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <!-- WAR profile 中将添加 exclusion --> </dependency> -  
配置 Maven 插件:
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> 
2.添加 Servlet 初始化器
为了让 Spring Boot 应用作为 WAR 包运行,需要提供一个 SpringBootServletInitializer 的子类。这个类将帮助 Spring Boot 启动并连接到 Servlet 容器。在你的项目中添加一个新的类,如下所示:
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
public class ServletInitializer extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(YourApplication.class);
    }
}
 
在上面的代码中,YourApplication 应该替换为你的主 Spring Boot 应用类的名字。
3. 定义 Maven Profiles
定义不同的 profiles,每个针对特定的打包需求:
<profiles>
    <profile>
        <id>jar</id>
        <!-- 默认激活 jar 打包模式 -->
      	<activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
            <packaging.type>jar</packaging.type>
        </properties>
    </profile>
    <profile>
        <id>war</id>
        <properties>
            <packaging.type>war</packaging.type>
        </properties>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-tomcat</artifactId>
                <scope>provided</scope>
            </dependency>
        </dependencies>
    </profile>
</profiles>
 
在 war 中,将 spring-boot-starter-tomcat 依赖的作用域设置为 provided 意味着在打包应用时,这个依赖不会被包含在 WAR 文件中。这是因为在 WAR 文件部署到外部容器(如 Tomcat)时,容器将提供 Tomcat 的实现。
3. 配置项目打包方式
使用 <packaging> 元素依据激活的 profile 设置打包类型:
<packaging>${packaging.type}</packaging>
 
4. 构建项目
通过命令行激活特定的 profile 进行构建:
- JAR 包:
mvn clean package -Pjar - WAR 包:
mvn clean package -P war,prod 
5. 测试和部署
完成配置后,全面测试应用程序以验证正确的构建和运行。然后,根据环境需求将应用部署到相应的服务器上。
结论
使用 Maven Profiles 和依赖排除策略可以灵活地管理 Spring Boot 应用的不同构建和部署配置。这种方法特别适合于在多环境开发中切换打包方式的需求,提高了构建过程的灵活性和可维护性。










