当前位置: 首页 > article >正文

Maven多环境打包方法配置

简单记录一下SpringBoot多环境打包配置方法,分部署环境和是否包含lib依赖包两个维度

目录

  • 一、需求说明
  • 二、目录结构
  • 三、配置方案
  • 四、验证示例

一、需求说明

  • 基于Spring Boot框架的项目
  • 分开发,测试,生产等编译部署环境(每一个环境只包含本环境对应的配置文件)
  • 可以包含或者去除lib依赖包( 依赖分离方式部署,节约jar文件上传服务器时间 )
  • Maven 方式单体工程打包 ( 适合中小业务快速部署 )

二、目录结构

按照不同的编译环境,分多个配置文件,目录结构如下图所示:
在这里插入图片描述

三、配置方案

在 工程目录下的 pom.xml 文件中配置打包相关( <build> ... </build>) 的内容:

       <!-- 默认编译配置项 -->
    <build>
        <finalName>${project.name}</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
            </plugin>
            <plugin>
                <artifactId>maven-source-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
    <!-- nolib 表示剔除lib包下面的所有maven依赖项目 -->
    <profiles>
        <profile>
            <id>nolib</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-maven-plugin</artifactId>
                        <configuration>
                            <layout>ZIP</layout>
                            <includes>
                                <include>
                                    <groupId>nothing</groupId>
                                    <artifactId>nothing</artifactId>
                                </include>
                            </includes>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>
         <!-- 默认环境配置,包含所有 -->
        <profile>
            <id>default</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>
        <!-- 通用动态环境配置 -->
        <profile>
            <id>dyn-env</id>
            <properties>
                <!-- 设置 env 的默认值为 dev,可被外部 -Denv 覆盖 -->
                <env>dev</env>
            </properties>
            <build>
                <resources>
                    <!-- 默认配置 -->
                    <resource>
                        <directory>src/main/resources</directory>
                        <!-- 排除其他环境的配置文件,若 Profile 未激活时默认包含 application.yml -->
                        <excludes>
                            <exclude>application-*.yml</exclude>
                            <exclude>db-*.setting</exclude>
                            <exclude>redisson/redisson-config-*.yml</exclude>
                        </excludes>
                    </resource>
                    <resource>
                        <directory>src/main/resources</directory>
                        <includes>
                            <!-- 动态匹配当前环境的配置文件 -->
                            <include>application-${env}.yml</include>
                            <include>db-${env}.setting</include>
                            <include>redisson/redisson-config-${env}.yml</include>
                        </includes>
                    </resource>
                </resources>
            </build>
        </profile>
    </profiles>

上面 默认编译配置项下的 maven-compiler-pluginmaven-source-plugin 插件是可选项。

nolib环境 表示剔除lib包下所有maven依赖项(这样打包出来的jar 只有几M大小,甚至只有几百KB)

四、验证示例

  • 示例1:使用prod环境打包且不包含lib依赖库
mvn clean package -Pdyn-env,nolib -Denv=prod
  • 示例2:使用prod环境打包且包含lib依赖库:默认包含lib依赖库
mvn clean package -Pdyn-env -Denv=prod
  • 示例3:使用默认环境打包且包含lib依赖库:默认包含lib依赖库 且默认application.yml中指定环境
mvn clean package
  • 示例4:使用默认环境打包且不包含lib依赖库:不包含lib依赖库 且默认application.yml中指定环境
mvn clean package -Pnolib 

http://www.kler.cn/a/513634.html

相关文章:

  • Elasticsearch(ES)基础查询语法的使用
  • JDBC实验测试
  • STM32之CubeMX图形化工具开发介绍(十七)
  • 【Linux】Linux入门(三)权限
  • linux平台RTMP|RTSP播放器如何回调SEI数据?
  • three.js实现裸眼双目平行立体视觉
  • SpringBoot拦截器
  • 专题三_穷举vs暴搜vs深搜vs回溯vs剪枝_全排列
  • 【王树森搜索引擎技术】概要04:搜索引擎的链路(查询词处理、召回、排序)
  • Linux的软件包管理器
  • 《Effective Java》学习笔记——第1部分 创建对象和销毁对象的最佳实践
  • Redis使用基础
  • TCP如何保证安全可靠?
  • 我国的金融组织体系,还有各大金融机构的分类,金融行业的组织
  • 【Excel】【VBA】Reaction超限点筛选与散点图可视化
  • 【线性代数】基础版本的高斯消元法
  • Keil自动生成Bin文件(2)
  • 2024年度个人成长与技术洞察总结
  • Data Filtering Network 论文阅读和理解
  • C++ 智能指针(八股总结)
  • 【组件库】使用Vue2+AntV X6+ElementUI 实现拖拽配置自定义vue节点
  • Springboot sse 示例
  • (done) 并行计算学习 (Day1: 两个简单的 OpenMP 例子)
  • JavaWeb开发(十五)实战-生鲜后台管理系统(二)注册、登录、记住密码
  • 【C++】揭秘类与对象的内在机制(核心卷之深浅拷贝与拷贝构造函数的奥秘)
  • 《从入门到精通:蓝桥杯编程大赛知识点全攻略》(五)-数的三次方根、机器人跳跃问题、四平方和