`
lishuaibt
  • 浏览: 111680 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

maven maven-war-plugin 的配置

阅读更多

     在公司使用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的深度的功能研究,待以后有需求的时候继续研究,记录在此以便查阅。

 

记录在此以便查阅

 

 

3
0
分享到:
评论
3 楼 liuzhaodong89 2011-02-15  
我试了下用这个插件不行,需要用maven-autoconfig-plugin这个插件才可以实现antx中的功能
2 楼 dinguangx 2010-04-23  
<warSourceExcludes>*/lib/analyzer-2.0.4.jar</warSourceExcludes>
这个写全路径应该可以的吧
${project.basedir}/webapp/WEB-INF/lib/analyzer-2.0.4.jar
1 楼 liupesnap 2010-04-06  
哈哈 帅哥 找资料找到你这里来了 最近这边的项目也是用maven来构建 这个插件也用了 但是后来发现 如果是多子项目模式(1个父项目+多个子项目的模式) 如果用了这个插件 那么直接在父项目中编译web这个子项目就过不了 但是如果我依次在每个子项目中执行编译就能过 很是奇怪。。我那个师兄也搞不懂这是什么问题 导致后来的log4j的level都是手动写死进去的哈 不晓得你遇到过这个问题没。。(其他的子项目,只要不打成war包,这种,参数变量都可以成功渲染哈)

相关推荐

Global site tag (gtag.js) - Google Analytics