Catalog中Maven自定义多环境打包方式
最近在解决性能优化时需要对优化后的cobjectstore进行全用例回归测试,这就需要在pom.xml文件中优化后的objectstore及其对应的package.jdo打包部署,但是基于原有的objectstore及其对应的package.jdo也需要打包部署,如果每次打包过程中我们都是人为的 根据 不同 环境 去修改一些 配置文件 ,这样不但工作量太庞大,而且还容易出错,而maven的插件正好解决了我们的困扰。(其实这就相当于对开发环境,测试环境,正式环境分环境打包部署)
通常使用 Maven的 Profile 和 Filtering 功能来解决。
Filtering 功能
Filtering 是 Maven Resources Plugin 的一个功能,它会使用系统属性或者项目属性的值替换资源文件(.properties,.xml)当中 ${…} 符号的值。使用的参数是-D
Profile功能
这里重点介绍Profile功能。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-----无关代码
<profiles>
<profile>
<id>online_template</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
</properties>
<dependencies>
</dependencies>
</profile>
<profile>
<id>offline_template</id>
<properties>
</properties>
<dependencies>
</dependencies>
</profile>
<!--下面是我写的-->
<profile>
<id>default</id>
<properties>
<objectstore.version>default</objectstore.version>
</properties>
<!--默認配置-->
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>dlc</id>
<properties>
<objectstore.version>dlc</objectstore.version>
</properties>
</profile>
</profiles>
在编译项目时,可以使用 -P 参数指定需要使用的 profile 的 id,比如下面命令将会使用 dlc环境,
mvn clean install -P dlc
其中,<properties></properties>里的标签可以自定义,比如我定义的<objectstore.version></objectstore.version>,后面做变量使用。
如果在一个profile中有<activeByDefault>true</activeByDefault>,表明假如不指定 -P 参数的话,则会使用 activeByDefault=true 的一项(即 default)。 在这里mvn clean install -P default
等同于`mvn clean install
。
使用时出现的问题
但是当我 mvn clean install -P dlc
打包编译时出现问题,经查发现 之前有人在定义<id>online_template</id>这个profile时也使用了<activeByDefault>true</activeByDefault>。导致默认参数指定失效,这时候就涉及指定-P参数需要指定两个参数,用,
分割,并且此时不存在默认情况,-P指定的参数必须全部显性的显示出来。即如下所示,这样便可成功编译。
mvn clean install -P online_template,dlc
编译好后根据之前指定的参数变量<objectstore.version></objectstore.version>在build.sh进行传参即可
REDIS_VERSION="${redis_version}"
OBJECTSTORE_VERSION="${objectstore_version}"
mvn clean install -P ${REDIS_VERSION},${OBJECTSTORE_VERSION} -DskipTests -Drat.skip=true
- 点赞
- 收藏
- 关注作者
评论(0)