继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

使用maven-war-plugin动态加载处理环境变量,过滤打包文件

波斯汪
关注TA
已关注
手记 364
粉丝 66
获赞 428

在公司使用ANTX作为构建工具,一直以来感觉ANTX的auto-config功能很实用,它很好的将不同环境的打包方式通过properties文件分离了开来,且ANTX的这部分功能的实现应该是采用Velocity实现,故可以实现非简单的变量填充的功能,在配置中还可以写简单VM的语法。后来构建工具转型到MAVEN之后一直在寻找一种与ANTX 的autoconfig功能类似的插件,以解决不同环境打包的动态参数设置问题。经过google后发现了此插件,此处记录一下该插件----maven-war-plugin 。

基本配置 :(包括排除 不想打进war包的jar 的配置) 

<build>       <filters>           <!-- 过滤文件,通常是一个属性文件(名值对的形式) -->           <filter>src/main/webapp/META-INF/auto-config.properties</filter>           <!--              <filter>${user.home}/antx.properties</filter>          -->       </filters>       <finalName>communitytag</finalName>       <plugins>           <plugin>               <groupId>org.apache.maven.plugins</groupId>               <artifactId>maven-war-plugin</artifactId>               <version>2.1-alpha-1</version>               <configuration>                   <!--                       打包之前过滤掉不想要被打进 .war包的jar,注意:这个地方,本来路径应该是                       WEB-INF/lib/anaalyzer-2.0.4.jar,但是经过多次试验,不能这样,至于咋回事儿,搞不清楚。。经多方查证均无结果                       暂且这样吧,虽然显得很丑陋,但是总能解决问题吧                   -->                   <warSourceExcludes>*/lib/analyzer-2.0.4.jar</warSourceExcludes>                   <webResources>                       <resource>                           <!-- 元配置文件的目录,相对于pom.xml文件的路径 -->                           <directory>src/main/webapp/WEB-INF</directory>                              <!-- 是否过滤文件,也就是是否启动auto-config的功能 -->                           <filtering>true</filtering>                              <!-- 目标路径 -->                           <targetPath>WEB-INF</targetPath>                       </resource>                   </webResources>               </configuration>           </plugin>       </plugins>   </build>

  如上配置及到web项目的pom文件中,且配置中路径相关的信息均以pom作为路径。

应用举例:

为了能更好的理解这个配置是怎么回事儿,我们来看看达到了什么样的效果,如下: 在应用的配置文件路径为 src/main/webapp/WEB-INF/biz/a.xml 有如下配置

<?xml version="1.0" encoding="GBK"?>   <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">   <beans default-autowire="byName">       <bean id="tagEntityManagementAO" class="com.taobao.communitytag.biz.ao.impl.DefaultTagEntityManagementAO">           <property name="namespace" value="${communitytag.biz.tair.namespace}"/>       </bean>   </beans>

  上面的配置中有如下需要动态植入的变量

${communitytag.biz.tair.namespace}

故我们将此变量对应的值配置到属性文件src/main/webapp/META-INF/auto-config.properties(pom.xml文件中filter的配置),如下  

communitytag.biz.tair.namespace=242

至此,执行命令mvn install,我们看看目标文件targe下的a.xml内容已经动态产生了,如下

<?xml version="1.0" encoding="GBK"?>   <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">   <beans default-autowire="byName">       <bean id="tagEntityManagementAO" class="com.taobao.communitytag.biz.ao.impl.DefaultTagEntityManagementAO">           <property name="namespace" value="242"/>       </bean>   </beans>

结果已经很形象了。。。虽然不能支持像antx那样对velocity语法的支持,但是此插件对于大多数环境打包来说,已经足够了。至于这个plugin的深度的功能研究,待以后有需求的时候继续研究,记录在此以便查阅。

原文链接:http://outofmemory.cn/maven/maven-war-plugin-build-war-package-with-variable-properties

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP