如何使用外部tasks
使用外部的tasks,做两步就行了:
- 把它们的实现放到Ant能找到的地方
- 声明它们
第一步让Ant找到外部的libraries有三种方法
- 通过命令行参数 -lib
- 放到 ${ant.home}/.ant/lib
- 放到 ${ant.home}/lib
第二步声明有四种方法
1. 使用单独的指令来声明一个单独的task
<taskdef name="taskname" classname="ImplementationClass"/>
例如:
<taskdef name="for" classname="net.sf.antcontrib.logic.For" />
声明完后就可以<taskname ... />
如 <for ... />
来使用这个task了
2. 使用内容为一系列taskname-ImplementationClass对的properties-file来声明一些tasks
例如
<taskdef resource="net/sf/antcontrib/antcontrib.properties" />
声明完后就可以<taskname ... />
如 <for ... />
来使用其中的一个task了
假设antcontrib.jar 已经被放在${ant.home}/lib里,代码如下
<project default="printSth">
<taskdef resource="net/sf/antcontrib/antcontrib.properties" />
<property name="comm" value="print" />
<target name="printSth">
<if>
<equals arg1="print" arg2="${comm}"/>
<then>
<echo>print sucessfully</echo>
</then>
</if>
</target>
</project>
运行结果
如果没有放到${ant.home}/lib里,还要指定classpath
<taskdef resource="net/sf/antcontrib/antcontrib.properties">
<classpath>
<pathelement location="C:\Users\kwang\Desktop\tmp\ant-contrib-0.6.jar"/>
</classpath>
</taskdef>
3. 使用内容为一系列<taskdef name="taskname" classname="ImplementationClass"/>
的xml-file来声明一些tasks
例如
<taskdef resource="net/sf/antcontrib/antlib.xml" />
声明完后就可以<taskname ... />
如 <for ... />
来使用其中的一个task了
4. 使用名字为antlib.xml的xml-file,XML-namespace 和 antlib协议来声明一些tasks
例如
<project xmlns:ac="antlib:net.sf.antcontrib"/>
声明完后就可以<ac:taskname ... />
如 <ac:if ... />
来使用这个task了。
代码
<project default="printSth" xmlns:ac="antlib:net.sf.antcontrib">
<property name="comm" value="print" />
<target name="printSth">
<ac:if>
<equals arg1="print" arg2="${comm}"/>
<then>
<echo>print sucessfully</echo>
</then>
</ac:if>
</target>
</project>
注:xmlns:ac
就是XML-namespace,ac是自己命名的,也可以是别的。
运行结果与本文章之前提到的结果一样