以下介绍几个常用的<target>任务标签的编写,有些主题与前面介绍重复的,则仅作提示。
设定属性
当在编写build.xml时发现到有一些属性设定出现过两次以上,例如目录的指定,可以将这些属性使用<property>加以设定,以后若要改变属性设定,就只要改变对应的<property>即可,不必在build.xml中来回搜索与修改。例如:
<target name="setProperties">
<property name="src.dir" value="src"/>
<property name="classes.dir" value="classes"/>
<property name="lib.dir" value="lib"/>
<property name="backup.dir" value="bak"/>
<property name="jar.file" value="${lib.dir}/JNameIt.jar"/>
</target>
属性设置在A.4节有较详细的介绍,这里不再重复说明。
提供 help 信息
可以提供一些ant构建时的help信息。例如:
<target name="help" description="Type ant help for detail.">
<echo message="Help information!!"/>
<echo>Help! Help!</echo>
<echo><![CDATA[
Here is a help info.
Write your own information here.
]]></echo>
</target>
CDATA表示提供字符信息(Character Data),在![CDATA["与"]]>之间的文字可以使用自由格式编写,适用于比较长的信息文字的显示。
style='font-family:宋体;KKKK:blue'>在执行ant时加上-projecthelp或-p就会自动显示help这个<target>上的内容。如果<target>上加有description属性,当使用ant -projecthelp时也会一并显示该信息。一个执行的例子如下:
C:\workspace\HelloWorld>ant -p
Buildfile: build.xml
Main targets:
help Type ant help for detail.
Default target: run
要显示详细信息,则需运行ant时指定help这个<target>。下面介绍如何显示详细信息:
C:\workspace\HelloWorld>ant help
Buildfile: build.xml
help:
[echo] Help information!!
[echo] Help! Help!
[echo]
[echo] Here is a help info.
[echo] Write your own information here.
[echo]
BUILD SUCCESSFUL
Total time: 0 seconds
文件的复制、建立与删除
在每一次构建程序前,会备份前一次的构建结果,可以使用<copy>标签来指定要复制的文件。例如:
<target name="backup">
<copy todir="${backup.dir}">
<fileset dir="${classes.dir}"/>
</copy>
</target>
在构建程序时,可以使用<mkdir>标签建立一些必要的目录。例如:
<target name="prepareDir"
description="prepare necessary dirs">
<mkdir dir="${classes.dir}"/>
<mkdir dir="${lib.dir}"/>
<mkdir dir="${backup.dir}"/>
</target>
编译程序
编译程序的任务当然是最常用的,还可以在编译程序时,加入一些Classpath的指定,这是一个相当方便的功能。例如:
<target name="compile"
description="compile the source files">
<javac srcdir="./src" destdir="${classes.dir}">
<classpath>
<fileset dir="${lib.dir}">
<include name="**/*.jar"/>
</fileset>
</classpath>
</javac>
</target>
A.5节中有更多有关路径设定的介绍,这里不再重复介绍。
执行程序
<java>标签用来执行Java程序。例如:
<java classname="onlyfun.caterpillar.HelloWorld">
<classpath path="."/>
</java>
制作jar文件
可以使用<jar>标签将编译完成的文件打包为.jar文件(Java Archive File),并可以指定MANIFEST文件。例如:
<target name="jar">
<mkdir dir="${libDir}"/>
<jar jarfile="${libDir}/${jarFile}"
manifest="META-INF/MANIFEST.MF"
basedir="${lib.dir}"/>
</target>
如果提供有MANIFEST.MF文件,才需要设定manifest属性。为了完成jar打包的任务,可以在META-INF目录下提供一个MANIFEST.MF文件。例如:
MANIFEST.MF
Manifest-Version: 1.0
Created-By: caterpillar
Main-Class: onlyfun.caterpillar.HelloWorld
Class-Path: HelloWorld.jar
执行ant时可以指定任务与提供lib目录及jar文件的名称。例如:
C:\workspace\HelloWorld>ant jar -DlibDir=lib -DjarFile=HelloWorld.jar
Buildfile: build.xml
jar:
[jar] Building jar: C:\workspace\HelloWorld\lib\HelloWorld.jar
BUILD SUCCESSFUL
Total time: 0 seconds
这里的设定所建立的jar由于包括Main-Class设定,而指定的类别中有main(),所以可以直接执行。例如:
C:\workspace\HelloWorld\lib>java -jar HelloWorld.jar
Hello Java!!
制作war文件
对于网站应用程序的部署,可以使用<war>标签将所有相关的文件包装为war(Web Application Archive)文件。例如:
<target name="war">
<war destfile="dist/guestbook.war"
webxml="src/webapp/WEB-INF/web.xml">
<classes dir="target/classes"/>
<lib file="beantools.jar"/>
</war>
</target>