我写了自己的ANT任务来执行某些功能。不过,我需要这个任务来调用一个java任务作为一个嵌套任务。所以,我有下面的代码在我的构建文件:在自定义任务中运行嵌套任务
<mytask ... >
<java ... />
</mytask>
我想java任务执行完毕后,但在此之前mytask
完成,清理的目的后运行一段代码。
这是一个破碎的设计,不建议在构建文件?如果不是,我应该采用哪种方法来运行清理方法?
我写了自己的ANT任务来执行某些功能。不过,我需要这个任务来调用一个java任务作为一个嵌套任务。所以,我有下面的代码在我的构建文件:在自定义任务中运行嵌套任务
<mytask ... >
<java ... />
</mytask>
我想java任务执行完毕后,但在此之前mytask
完成,清理的目的后运行一段代码。
这是一个破碎的设计,不建议在构建文件?如果不是,我应该采用哪种方法来运行清理方法?
让你的任务实现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>
任务,只需遍历列表并针对每个任务调用方法即可。
更新:
添加嵌套任务时,它不会自动运行。如果您的自定义任务中未调用方法,它甚至不会运行。
所以...一个非常基本的和简单的例子:
// your custom task's execute...
public void execute() {
//do something
for (Task task : _nestedTask) {
task.perform(); // here the nested task is executed.
}
//do something
}
还有一两件事:改变这个Q&A的标题为'运行定制task'或类似的嵌套任务...可以吸引更多的关注。 – coolcfan
谢谢coolcfan! – Neel