作为现在Java构建工具中事实上的标准,Ant被设计成可以通过Java类进行扩展,而且只需要很少的Java代码,就可以编写一个新的Ant任务。
其实编写一个 Ant任务非常简单,只需要编写一个带有一个execute()方法的Java类就行了。
Package org.cactus.ant.tasks
Public class SimpleTask{
Public void execute(){
System.out.println(“Simple Task!”);
}
}
这个Java不需要扩展任何基类,只需要一个方法就行:execute( )。但这个方法必须是公有的(public),没有参数,而这个类必须能通过无参的构造函数实例化。这个方法可以有返回值,但是会被忽略并且产生一个警告信息。任务在执行过程中可以有System.out和System.err的输出,但是会被Ant截获并按照适当的日志级别写入相应的日志。
<taskdef>标签用于自定义一些任务,从而将第三方的任务集成到构建文件中。你可以在目标(<target>)之外声明<typedef>,以便把这些任务定义成全局任务。不过任务的类文件必须位于其可见的classpath内。为了可以在同一个构建过程中使用编译过的任务,<taskdef>必须出现在编译之后。
<?xml version=” 1.0” ?>
<project name=”tasks” default=”main”>
<property name=”build.dir” location=”build”/>
<target name=”init”>
<mkdir dir=”${build.dir}”>
</target>
<target name=”compile” depends=”init”>
<javac srcdir=”src” destdir=”${build.dir}”/>
</target>
<target name=”simpletask” depends=”compile”>
<taskdef name=”simpletask”
classname=”org.example.antbook.tasks.SimpleTask” classpath=”${build.dir}”>
<simpletask/>
</target>
<target name=”clean”>
<delete dir=”${build.dir}”>
</target>
<target name=”main” depends=”simpletask”/>
</project>
1.1 任务的生命周期
下面是Ant任务的生命周期,构建过程从装载Ant和解析构建文件开始:
l 当Ant 解析构建文件时,对文件中声明的每个任务,通过不带参数的构造函数建立一个恰当的Task的子类的实例。
l