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