轻松扩展Ant的实现方法是什么?
Ant 自带了大量的任务(Task),在网上也有大量的任务可用,可是如果你面对的是别人根本不会想到的问题,怎么办呢?其实,只要花一点点功夫就可以编写出自己的任务出来。我开始也没想到会这样简单(做嵌套任务碰到一点问题),由此可见Ant的结构设计是相当优秀的。 假设我们需要显示任务执行各花了多少时间,写一个TimerTask 起步:覆盖org。apache。tools。ant。Task的execute方法 import org。 apache。tools。ant。Task; import org。apache。tools。ant。BuildExc...全部
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。
。收起