Catalog中Maven自定义多环境打包方式

举报
OceanHu 发表于 2020/07/20 11:21:47 2020/07/20
【摘要】 开发环境,测试环境,正式环境分环境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



【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。