锁定老帖子 主题:maven生成war包的两种方式
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-12-10
最后修改:2009-12-13
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目录等等。 可以在需要打包的工程中直接设定:<pom>war</pom> 这样在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中 <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真的很强大! 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-12-27
通过web有关的archetype比如maven-archetype-webapp生成的工程不就是war打包类型的?
|
|
返回顶楼 | |
发表时间:2009-12-27
当然,这是最基本的,自动对web工程达成war包,但如果你想去除某些内容或者修改输出目录,是不是需要自定义下呢
|
|
返回顶楼 | |
浏览 84863 次