• 动态切换 Spring Boot 打包配置:使用 Maven Profiles 管理 JAR 和 WAR


    引言

    在多环境开发中,我们经常需要根据部署环境来改变 Spring Boot 应用的打包方式。本文将探讨如何使用 Maven Profiles 结合依赖排除来动态地切换 JAR 和 WAR 打包配置。

    1. 修改 pom.xml 以支持 WAR

    转换 Spring Boot 应用从 JAR 到 WAR 时,首先需要在 pom.xml 中进行一些基本调整:

    • 修改 Spring Boot Starter:

      <dependency>
          <groupId>org.springframework.bootgroupId>
          <artifactId>spring-boot-starter-webartifactId>
          
      dependency>
      
      • 1
      • 2
      • 3
      • 4
      • 5
    • 配置 Maven 插件:

      <build>
          <plugins>
              <plugin>
                  <groupId>org.springframework.bootgroupId>
                  <artifactId>spring-boot-maven-pluginartifactId>
              plugin>
          plugins>
      build>
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8

    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);
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在上面的代码中,YourApplication 应该替换为你的主 Spring Boot 应用类的名字。

    3. 定义 Maven Profiles

    定义不同的 profiles,每个针对特定的打包需求:

    <profiles>
        <profile>
            <id>jarid>
            
          	<activation>
                <activeByDefault>trueactiveByDefault>
            activation>
            <properties>
                <packaging.type>jarpackaging.type>
            properties>
        profile>
        <profile>
            <id>warid>
            <properties>
                <packaging.type>warpackaging.type>
            properties>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.bootgroupId>
                    <artifactId>spring-boot-starter-tomcatartifactId>
                    <scope>providedscope>
                dependency>
            dependencies>
        profile>
    profiles>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    war 中,将 spring-boot-starter-tomcat 依赖的作用域设置为 provided 意味着在打包应用时,这个依赖不会被包含在 WAR 文件中。这是因为在 WAR 文件部署到外部容器(如 Tomcat)时,容器将提供 Tomcat 的实现。

    排除 spring-boot-starter-tomcat 依赖

    另一种方法是完全排除 spring-boot-starter-tomcat 依赖。这在你不想在开发环境中使用嵌入式 Tomcat 服务器时很有用。在这种情况下,你的应用将完全依赖于外部容器来提供 Tomcat 的功能。这通常在 pom.xml 中通过依赖排除来实现:

    <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-webartifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-tomcatartifactId>
            exclusion>
        exclusions>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    选择哪种方法

    • 如果你想在开发和测试阶段使用嵌入式 Tomcat,但在生产中使用外部容器,则使用 provided 作用域是更好的选择。
    • 如果你打算在所有环境中都使用外部容器,并且不希望在应用中包含嵌入式 Tomcat,则应选择排除依赖的方法。

    3. 配置项目打包方式

    使用 元素依据激活的 profile 设置打包类型:

    <packaging>${packaging.type}packaging>
    
    • 1

    4. 构建项目

    通过命令行激活特定的 profile 进行构建:

    • JAR 包:mvn clean package -Pjar
    • WAR 包:mvn clean package -P war,prod
    1. 在 Maven 命令中使用 -P 选项时,它可以紧跟着 profile 名称,也可以与之用空格分开。两种方式在功能上是等效的,选择哪一种主要取决于个人喜好或者团队的编码规范。

    2. 命令 mvn clean package -P war,prod 会同时激活 warprod 这两个 profiles。

      这种方式在需要根据不同的环境或配置同时应用多个 profiles 时非常有用。在你的例子中,假设 war profile 配置了项目打包为 WAR 文件,而 prod profile 可能包含了生产环境特有的配置,如数据库配置、优化的日志设置等。使用这个命令,Maven 将整合这两个 profiles 的配置来构建项目。

    5. 测试和部署

    完成配置后,全面测试应用程序以验证正确的构建和运行。然后,根据环境需求将应用部署到相应的服务器上。

    结论

    使用 Maven Profiles 和依赖排除策略可以灵活地管理 Spring Boot 应用的不同构建和部署配置。这种方法特别适合于在多环境开发中切换打包方式的需求,提高了构建过程的灵活性和可维护性。

  • 相关阅读:
    如何安装Xftp实现上传和下载文件
    哪些不得不记下的汇编指令
    基于javaweb的医疗挂号管理系统(java+springboot+freemarker+layui+mysql)
    SpringBoot 整合 Websocket 通信demo (附浏览器聊天窗口)
    P2P内网穿透之Nat类型介绍及Nat类型检测穿透操作方法整理
    vue-router4 |name的作用|query传参|parmas传参|动态路由参数|命名视图|别名alias|前置路由守卫|路由过渡效果|滚动行为
    java计算机毕业设计新城街道社区的健康档案管理平台源码+mysql数据库+lw文档+系统+调试部署
    【Python机器学习】零基础掌握StackingClassifier集成学习
    为什么网站页面没有被百度搜索收录?是网站被攻击了?
    python和Springboot如何交互?
  • 原文地址:https://blog.csdn.net/mbh12333/article/details/134376227