简述如何在Ant自定义的task中嵌套元素.通过定义add方法将嵌套task加到自定义的task里面.
被嵌入的task:
public class InnerTask extends Task {
public void execute() throws BuildException {
getProject().log("InnerTask log message");
}
}
包含嵌套任务的task:
public class NestTask extends Task {
private List<Task> taskList = new ArrayList<Task>();
private InnerTask innerTask;
public void add(Task innerTask) {
getProject().log("add");
taskList.add(innerTask);
}
public void execute() throws BuildException {
getProject().log("NestTask log message");
for (Task t : taskList) {
getProject().log(t.getTaskName());
t.execute();
}
}
}
build文件:
<taskdef name="innerTask1" classname="com.test.owntask.InnerTask" classpathref="testTask.classpath" />
<taskdef name="innerTask2" classname="com.test.owntask.InnerTask" classpathref="testTask.classpath" />
<taskdef name="nestTask" classname="com.test.owntask.NestTask" classpathref="testTask.classpath" />
<target name="testTask">
<nestTask >
<innerTask1 />
<innerTask2 />
</nestTask>
</target>
运行结果:
testTask:
add
add
NestTask log message
innerTask1
InnerTask log message
innerTask2
InnerTask log message
如果通过实现TaskContainer来嵌套task的话,调用嵌套的task的时候不能调用嵌套的task的execute方法,而要调用perform方法.
如下:
public class NestTask extends Task implements TaskContainer{
private List<Task> taskList = new ArrayList<Task>();
public void execute() throws BuildException {
getProject().log("NestTask log message");
for (Task t : taskList) {
getProject().log(t.getTaskName());
t.perform();
}
}
public void addTask(Task arg0) {
getProject().log("addTask" + arg0.getTaskName());
taskList.add(arg0);
}
}