利用assembly插件分环境打包配置文件
【利用assembly插件分环境打包配置文件】
首先, 郑重的吐槽下度娘, 能找到的资料, 都是说针对打包好啦, 现在上正解.tar.gz
的, 找了好一会儿, 才找到针对war
包.
开始并不顺利, 因为在父子模块的场景下, 有war,有jar. 最后发现打包的lib里包含war包. 这样不是重复打包吗, 而且, 并不能打成标准war包结构.
工程结构:
parent//pom
| common//jar
| dao//jar
| web//war
针对中这种结构的工程, 网上的
tar.gz
的做法并不适用. 主要是: 1)会将web
模块的war包打进lib文件中;
2)目录结构不是war包应有的结构. 前者是因为maven自带的编译打包工具会先执行打包操作, 这样轮到assembly打包时会将打好的war包打进lib文件夹中.针对上文的工程结构, 需要:
-
parent
pom中统一配置自带的编译插件. 主要是指定编译的jdk版本.(否则默认会使用1.5的. 不会的需要补充学习下). -
jar
模块如果需要分环境打包配置文件, 则不需要任何多余的配置, 使用的默认的jar打包即可. -
web
模块是重点. 下文的配置都是针对web的配置. 通常web工程更多的需要分环境打包配置文件.
文章图片
1527171764196.png 我这里的思路是:
resources
下可以放置每个环境都需要的公共配置文件. 分环境的放在./src/main/assembly/
下.1 web模块的pom.xml中的
profiles
配置dev trueenv
dev
dev
maven-assembly-plugin
${basedir}/src/main/assembly/assembly.xml
${project.artifactId}-${project.version}
${project.build.directory}
test env
test
test
maven-assembly-plugin
${basedir}/src/main/assembly/assembly.xml
${project.artifactId}-${project.version} ${project.build.directory}
2 web模块的pom.xml中引入
assembly
插件org.apache.maven.plugins
maven-jar-plugin
2.5
true
org.apache.maven.plugins
maven-assembly-plugin2.2.1
assemble
single
package
false
false
3 配置定制
assembly.xml
web
war dir
false
${project.build.outputDirectory}
WEB-INF/classes
${project.basedir}/src/main/assembly/${env}
WEB-INF/classes
${project.basedir}/src/main/resources
WEB-INF/classes
${project.basedir}/src/main/webapp
/
WEB-INF/lib false
这里采用的方案是, 不同环境公用同一个
assembly.xm
l文件.4 执行打包的命令
各环境对应的命令:
mvn clean package
mvn clean package -P dev
mvn clean package -P test
mvn clean package -P prod
后记
分环境打包的分支控制策略有两种:
- 通过
profile
配置不同的环境下的配置, 然后打包的时候通过参数-P 环境id
定位到对应profile
, 就会执行该profile
下的所有配置, 包括自定义的properties
(这里的properties
和profile
外层的效果一样). 本文采用的就是这个思路.
这种方案的好处是, 可以方便的定义默认打包环境.
- 不同环境的配置文件分别放在不同的路径下, 打包配置中用
${env}
动态执行路径, 然后打包时带上参数:-Denv=环境名称
, 即动态手动指定环境名, 定位到对应路径下的配置文件. 这种方案看似简单好实施, 但有个缺陷就是不方便执行默认打包环境.
下图中两种property效果完全不同的, 上面的我完全不知道有什么鸟用, 下面的才是关键.
文章图片
properties
推荐阅读
- jQuery插件
- VueX--VUE核心插件
- 用npm发布一个包的教程并编写一个vue的插件发布
- Spring|Spring Boot 自动配置的原理、核心注解以及利用自动配置实现了自定义 Starter 组件
- 【万伽复利】什么是复利(如何利用复利赚钱?)
- 插件化无法获取或找到.so文件
- maven使用tomcat7插件编译jsp出错
- 苹果手机如何利用库乐队自制铃声
- 超好用的PubMed文献查找管理插件—Scholarscope
- Android|Android Studio 的 Browse Repositories 下载不了插件