2012-05-08 9 views
0

私は自分自身のANTタスクを作成していくつかの機能を実行しました。しかし、ネストタスクとしてjavaタスクを呼び出すには、このタスクが必要です。だから、私はビルドファイルに次のコードを持っている:カスタムタスクでネストされたタスクを実行する

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

私はJavaのタスクが実行されるが、mytaskが完了する前に、クリーンアップのために終了した後にコードの一部を実行したいと思います。

これは壊れたデザインですか、ビルドファイルでは推奨されていませんか?そうでない場合は、クリーンアップメソッドを実行するためにどのメソッドをオーバーライドする必要がありますか?

+0

そして、一つのこと:より多くの注意を引くことがあります...カスタムtask'または同様にネストされたタスクを実行します 'このQ&Aのタイトルを変更。 – 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

@eel 'addTask'と' task.execute'を呼び出すことは別々の2つのステップです。 'addTask'はAntによって呼び出されますが、それが追加されたときにネストされたタスクが実行されるわけではありません。ネストされたタスクは、 'execute'メソッドを呼び出すまで実行されません。私の更新された答えを見てください。 – coolcfan

+0

ありがとうcoolcfan! – Neel

関連する問題