轻松扩展Ant的实现方法

文章作者 100test 发表时间 2007:10:24 11:57:33
来源 100Test.Com百考试题网


Ant 自带了大量的任务(Task),在网上也有大量的任务可用,可是如果你面对的是别人根本不会想到的问题,怎么办呢?其实,只要花一点点功夫就可以编写出自己的任务出来。我开始也没想到会这样简单(做嵌套任务碰到一点问题),由此可见Ant的结构设计是相当优秀的。

假设我们需要显示任务执行各花了多少时间,写一个TimerTask

起步:覆盖org.apache.tools.ant.Task的execute方法

import org.apache.tools.ant.Task.
import org.apache.tools.ant.BuildException.


public class TimerTask extends Task {
public void execute() throws BuildException {
System.out.println("I am a timer").
}
}
注意,编译时ant.jar必须在Classpath上。
简单起见,假设java源文件,类文件在同一目录下,在此目录再写一个build.xml文件:









打开Dos窗口,到此目录,运行ant
够简单吧!如果类路径比这复杂或者在jar文件中,设置的classpath属性就行了。

继续:设置属性
假设我们想添加一个action属性,在Java文件中:
private String action.
….
public void execute() throws BuildException {
if (action.equals(“init”)) {

}

}

public String getAction() {
return action.
}

public void setAction(String string) {
action = string.
}

在xml文件中:


使用Project保存中间结果
对于这个任务来讲,必须把时间值保存起来,比较合适的就是org.apache.tools.ant.Project了,Project对象生命期是整个Build,并且可以通过setProperty, getProperty等方法保存/获取值。

public void execute() throws BuildException {
if (getOwningTarget() == null)
return.
Project proj = getOwningTarget().getProject().

// can do smt with proj now
}

晋级:嵌套任务
如果我们想要在Timer下面再嵌套子任务(好像没有这个必要 :-):




那我们首先只需要写一个简单的FooTask,然后在build.xml加上的定义:



然后给TimerTask添加一个方法:
public void addFoo(FooTask foo) {
}
注意:addXXX的XXX由中的name决定,Ant会利用Java Reflection去找;类型必须是具体的类型FooTask,不能是Task。


相关文章


JavaA let程序的远程调试方法
关于java自动装箱与拆箱的分析
Java多媒体处理之添加播放MIDI音乐功能
Java图形程序中的对话逐字显示的实现方法
轻松扩展Ant的实现方法
javaio向txt文件中输入换行符实现代码
创建数据库连接对象(java.sql.Co ection)的类包
Java使用OCI驱动连接Oracle数据库实现方法
Swing编写灵敏的图形用户界面
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛