2、比较常见的做法是,定义个properties文件,在该文件中将任务的名称和类名相对应,在一个文件中可以定义多个任务。在构建文件(build.xml)中,只需要指定该文件和类所在的路径,就可以一次定义多个任务了。比如:
....
3、一般来说,如果第三方提供自己的任务,都会事先写好properties供他人使用。该properties文件一般存在jar包中,此时在构建文件中声明任务:
<taskdef
source="task.properties"
classpath="${xdoclet.jar}"
/>
二、第三方任务ant-contrib
要使用第三方任务ant-contrib,首先需在其网站获得ant-contrib.jar。
ant-contrib主要有下面几个任务:
1、C++编译和连接任务
2、propertycopy--允许特性动态展开为解引用的特性。见学习笔记3--特性解引用
3、osfamily--设置表明操作系统的特性,比如mac,windows,unix。
<target name="testosfamily">
<osfamily
property="MyOs"/>
<echo message="MyOs is
${MyOs}"/>
</target>
将返回:
[echo] MyOs is windows
4、逻辑任务if,switch,foreach,trycatch等。
if逻辑结构,例子:
<target
name="testif">
<if><not><isset
property="testif1.prop"/></not>
<then><echo
message="testif1 is not
set"/>
<if><isset
property="testif2.prop"/>
<then><echo
message="testif2
is set"/></then>
<else><echo
message="testif2 is not
set"/></else>
</if>
</then>
<elseif><isset
property="testif2.prop"/>
<then><echo
message="testif1 is
set"/>
<echo
message="testif2
is set"/>
</then>
</elseif>
<else>
<echo
message="testif1
is set"/>
<echo
message="testif2 is not
set"/>
</else>
</if>
</target>
switch的逻辑结构,例子:
<target
name="testswitch">
<switch
value="${testswitch}">
<case
value="branch1">
<echo message="enter
branch1..."/>
</case>
<case
value="branch2">
<echo message="enter
branch2..."/>
</case>
<default>
<echo
message="enter default
branch..."/>
</default>
</switch>
</target>
使用显示循环foreach,例子:
foreach有两个要循环的列表,一个用list指定,另一个可用fileset指定。两个选其一就可以了,也可以两个同时存在。target和param必须存在。
<target
name="testforeach">
<foreach list="1,2,3" target="loop"
param="var"
/>
</target>
<target name="loop">
<echo message="var =
${var}"/>
</target>
<target name="testforeach">
<foreach
target="loop" param="var">
<fileset
dir="src"/>
</foreach>
</target>
<target name="loop">
<echo message="var =
${var}"/>
</target>
捕获任务异常,例子:
<target name="testtrycatch">
<trycatch
property="exception.prop"
reference="exception.ref">
<try>
<fail>TestException!</fail>
</try>
<catch>
<echo
message="exception is caught
here"/>
</catch>
<finally>
<echo
message="finally"/>
</finally>
</trycatch>
<property
name="exref" refid="exception.ref"/>
<echo
message="exception.prop=${exception.prop},
exception.ref=${exref}"/>
</target>
输出结果为:
[trycatch] Caught exception:
TestException!
[echo] exception is caught
here
[echo]
finally
[echo] exception.prop=TestException!,
exception.ref=D:\personal\java\ant\bu
ild.xml:267:
TestException!