介绍
ant的war任务是jar任务的扩展,对于文件特殊处理,最后放在war文件的WEB-INF/lib、或者 WEB-INF/classes 、或者 WEB-INF
目录下面。
war任务是规定WAR文件特殊布局的一种快捷方式。其实相同的目标通过ant的zip或者jar任务也照样能实现。
war任务部分属性说明
destfile和warfile
:指明要创建的WAR文件。这两个属性只能且必须存在1个。warfile
这个属性已经废弃,不建议使用,而建议使用destfile
属性。
例如:
webxml
:servlet要使用的配置描述符(WEB-INF/web.xml)。例如:
needxmlfile
:指明是否需要web.xml。当生成servlet 2.5版本及以后的WAR文件并且没有web.xml文件的时候,这个属性的值要设置为false。(备注:servlet 2.5版本以前,在WAR文件中,WEB-INF/web.xml文件是必须的,而在servlet 2.5版本及以后,是可选的)compress
:是否压缩,默认值是true。
作为内嵌元素声明的参数
lib
:内嵌的lib元素声明了一个文件集( FileSet)。在这个文件集中的所有文件最后都放在war文件的WEB-INF/lib目录下。例如:
classes
:内嵌的classes元素声明了一个文件集。这个文件集中的所有文件最后都放在war文件的WEB-INF/classes目录下。例如:
webinf
:内嵌的webinf元素声明了一个文件集。这个文件集中的所有文件最后都放在war文件的WEB-INF目录下。如果文件集中包含了一个 web.xml文件,那么这个文件会被忽略,并给出告警。 webinf元素可以出现多次。
例如:
再例如:
<war warfile="${build.war.home}/${ant.project.name}.war" webxml="${basedir}/src/main/resources/etc/web.xml">
<webinf dir="${basedir}/src/main/resources/etc" includes="sun-jaxws.xml"/>
<webinf dir="${basedir}/src/main/resources" includes="log4j2.xml,mybatis-config.xml"/>
<classes dir="${build.classes.home}"/>
<lib dir="${lib.home}"></lib>
</war>
metainf
:内嵌的metainf元素声明了一个文件集。这个文件集中的所有文件最后都放在war文件的META-INF目录下。如果文件集中包含了一个MANIFEST.MF文件,那么这个文件会被忽略,并给出告警。- 其它的资源集合,例如fileset、zipfileset等。例如下面使用了zipfileset:
上面zipfileset元素及其属性的含义:src/graphics/images/gifs
目录下的内容,最后都放在war包内images目录下面。
举例
该例子来自ant官网手册https://ant.apache.org/manual/index.html
假设项目基目录下面的结构布局如下:
thirdparty/libs/jdbc1.jar
thirdparty/libs/jdbc2.jar
build/main/com/myco/myapp/Servlet.class
src/metadata/myapp.xml
src/html/myapp/index.html
src/jsp/myapp/front.jsp
src/graphics/images/gifs/small/logo.gif
src/graphics/images/gifs/large/logo.gif
用下面的war任务来生成myapp.war文件:
<war destfile="myapp.war" webxml="src/metadata/myapp.xml">
<fileset dir="src/html/myapp"/>
<fileset dir="src/jsp/myapp"/>
<lib dir="thirdparty/libs">
<exclude name="jdbc1.jar"/>
</lib>
<classes dir="build/main"/>
<zipfileset dir="src/graphics/images/gifs"
prefix="images"/>
</war>
最后生成的myapp.war文件包含:
WEB-INF/web.xml
WEB-INF/lib/jdbc2.jar
WEB-INF/classes/com/myco/myapp/Servlet.class
META-INF/MANIFEST.MF
index.html
front.jsp
images/small/logo.gif
images/large/logo.gif
其中,利用了ant默认的manifest文件, WEB-INF/web.xml文件的内容和src/metadata/myapp.xml文件的内容完全相同。