我已经编写了自己的ANT任务来执行某些功能。但是,我需要此任务来将java任务作为嵌套任务调用。所以我在构建文件中有以下代码:
<mytask ... >
<java ... />
</mytask>
我希望在java任务完成执行之后但在mytask
完成之前运行一段代码,以便进行清理。
这是一个破碎的设计,不建议在构建文件中使用吗?如果没有,我应该采用哪种方法来运行清理方法?
答案 0 :(得分:1)
让您的任务实现org.apache.tools.ant.TaskContainer
界面,编写自己的addTask(Task task)
方法。
例如(它应该只接受一个名为“java”的任务):
private List<Task> _nestedTask = new ArrayList<>();
public void addTask(Task task) {
if (task.getTaskName().equals("java")) {
_nestedTasks.add(task);
}
else {
throw new BuildException("Support only nested <java> task.");
}
}
请注意,如果在构建文件中编写多个嵌套<java>
任务,则需要由自己处理。要执行嵌套的<java>
任务,只需遍历列表并为每个任务调用execute()
方法。
更新
添加嵌套任务时,它不会自动运行。如果未在自定义任务中调用execute()
方法,它甚至不会运行。
所以...一个非常基本而简单的例子:
// your custom task's execute...
public void execute() {
//do something
for (Task task : _nestedTask) {
task.perform(); // here the nested task is executed.
}
//do something
}