2012-05-08 125 views
0

我寫了自己的ANT任務來執行某些功能。不過,我需要這個任務來調用一個java任務作爲一個嵌套任務。所以,我有下面的代碼在我的構建文件:在自定義任務中運行嵌套任務

<mytask ... > 
    <java ... /> 
</mytask> 

我想java任務執行完畢後,但在此之前mytask完成,清理的目的後運行一段代碼。

這是一個破碎的設計,不建議在構建文件?如果不是,我應該採用哪種方法來運行清理方法?

+0

還有一兩件事:改變這個Q&A的標題爲'運行定製task'或類似的嵌套任務...可以吸引更多的關注。 – coolcfan

+0

謝謝coolcfan! – Neel

回答

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>任務,只需遍歷列表並針對每個任務調用​​方法即可。

更新:

添加嵌套任務時,它不會自動運行。如果您的自定義任務中未調用​​方法,它甚至不會運行。

所以...一個非常基本的和簡單的例子:

// your custom task's execute... 
public void execute() { 
    //do something 

    for (Task task : _nestedTask) { 
     task.perform(); // here the nested task is executed. 
    } 

    //do something 
} 
+0

是的,我有這個代碼來添加嵌套任務,但這裏是問題:只有在嵌套任務執行之前調用addTask方法,我應該在哪裏調用'cleanup'方法,以便在調用之後Java任務? – Neel

+0

@Neel'addTask'和調用'task.execute'是兩個單獨的步驟。 'addTask'由Ant調用,但並不意味着嵌套任務在添加時被執行。直到你調用它的'execute'方法,嵌套的任務纔會運行。看到我更新的答案。 – coolcfan

+0

謝謝coolcfan! – Neel