我寫了自己的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