简单记录一下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-plugin
和 maven-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