maven生成war包的两种方式
maven生成war包的两种方式
maven 配置
war包即对WEB应用程序进行打包,用于应用容器的部署。如在jboss中只要把war包丢入deploy目录下即可发布自己的应用了。打包方式有很多中,很多工具本身就支持此功能。下面主要介绍通过maven来操作的两种方式:
方法一:
即第一反应的那种啦,就是利用maven的maven-war-plugin。
- <****build****>
- <****plugins****>
- ……
- <****plugin****>
- <****groupId****>org.apache.maven.plugins</****groupId****>
- <****artifactId****>maven-war-plugin</****artifactId****>
- <****version****>2.0.2</****version****>
- <****configuration****>
- <****warSourceExcludes****>WEB-INF/lib/log4j-${log4j.version}.jar</****warSourceExcludes****>
- </****configuration****>
- </****plugin****>
- </****plugins****>
- </****build****>
当然你可以指定war包的名称,输出的目录,webapp目录等等。
可以在需要打包的工程中直接设定:war
这样在install的时候就会对此工程生成相应配置的war包,原来此web工程依赖的其他工程全部会以jar包的形式出现在lib目录下,所以不需要再去关心war包中集成的jar包是否完整,maven已经帮你做完了。
顺便提一句,在jboss中发布war包,如果包中包含log4j.jar,会报错,所以在本例中将此jar包排除在外。
方法二:
不用war插件,而是用到另外三个插件:maven-dependency-plugin 、maven-antrun-plugin 、 build-helper-maven-plugin
下面分别说明下着三个插件在此过程扮演的角色:
maven-dependency-plugin :相当于数据收集器,该依赖那些jar包,该加载那些resource信息。
maven-antrun-plugin:完成收集完文件夹的压缩和包的重命名。
build-helper-maven-plugin:让压缩包拥有男人本色,oh sorry 是war本色。
在写pom.xml配置前,先说明下目录结构
root
|
|—template
|
|—wardir
其中这两个目录都作为maven的独立工程,下面要写配置在wardir下的pom.xml中
Xml代码 %!(EXTRA markdown.ResourceType=, string=, string=)
- <****build****>
- <****plugins****>
- <****plugin****>
- <****groupId****>org.apache.maven.plugins</****groupId****>
- <****artifactId****>maven-dependency-plugin</****artifactId****>
- <****version****>2.0</****version****>
- <****executions****>
- <****execution****>
- <****id****>create-structure</****id****>
- <****phase****>process-resources</****phase****>
- <****goals****>
- <****goal****>unpack</****goal****>
- </****goals****>
- <****configuration****>
- <****artifactItems****>
- <****artifactItem****>
- <****groupId****>GROUPID</****groupId****>
- <****artifactId****>template</****artifactId****>
- </****artifactItem****>
- </****artifactItems****>
- <****outputDirectory****>
- ${project.build.directory}/${assembly.name}.war
- </****outputDirectory****>
- </****configuration****>
- </****execution****>
- <****execution****>
- <****id****>copy-libs</****id****>
- <****phase****>process-resources</****phase****>
- <****goals****>
- <****goal****>copy</****goal****>
- </****goals****>
- <****configuration****>
- <****artifactItems****>
- <****artifactItem****>
- <****groupId****>jdom</****groupId****>
- <****artifactId****>jdom</****artifactId****>
- </****artifactItem****>
- ……
- </****artifactItems****>
- <****outputDirectory****>${project.build.directory}/${assembly.name}.war/WEB-INF/lib**</**outputDirectory****>
- </****configuration****>
- </****execution****>
- </****executions****>
- </****plugin****>
- <****plugin****>
- <****groupId****>org.apache.maven.plugins</****groupId****>
- <****artifactId****>maven-antrun-plugin</****artifactId****>
- <****version****>1.3</****version****>
- <****executions****>
- <****execution****>
- <****id****>copy-config</****id****>
- <****phase****>process-resources</****phase****>
- <****goals****>
- <****goal****>run</****goal****>
- </****goals****>
- <****configuration****>
- <****tasks****>
- <****copy** todir=”${project.build.directory}/${assembly.name}.war”**>
- <****fileset** dir=”src/main/resources” **/>
- </****copy****>
- <****zip** destfile=”${project.build.directory}/${assembly.name}-${project.version}-war.zip”**>
- <****zipfileset** dir=”${project.build.directory}/${assembly.name}.war” includes=”***.*” excludes=”*.zip” **/>
- </****zip****>
- **<**copy file=”${project.build.directory}/${assembly.name}-${project.version}-war.zip”
- tofile=”${project.build.directory}/${assembly.name}-${project.version}.war” />
- </****tasks****>
- </****configuration****>
- </****execution****>
- </****executions****>
- </****plugin****>
- <****plugin****>
- <****groupId****>org.codehaus.mojo</****groupId****>
- <****artifactId****>build-helper-maven-plugin</****artifactId****>
- <****version****>1.4</****version****>
- <****executions****>
- <****execution****>
- <****id****>attach-artifacts</****id****>
- <****phase****>package</****phase****>
- <****goals****>
- <****goal****>attach-artifact</****goal****>
- </****goals****>
- <****configuration****>
- <****artifacts****>
- <****artifact****>
- <****file****>${project.build.directory}/${assembly.name}-${project.version}.war**</**file****>
- <****type****>war</****type****>
- </****artifact****>
- </****artifacts****>
- </****configuration****>
- </****execution****>
- </****executions****>
- </****plugin****>
- </****plugins****>
- </****build****>
当然这种方式也可以用来打ear包。对于打无页面操作系统的war包,个人认为用后者更灵活,当然建立假web工程,再依赖工程,通过第一种方式同样可以达到最终的结果。看个人喜好了。
结束语:maven真的很强大!


