0

いくつかの機能を実行する独自の ANT タスクを作成しました。ただし、Java タスクをネスト タスクとして呼び出すには、このタスクが必要です。したがって、ビルドファイルに次のコードがあります。

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

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

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

4

1 に答える 1

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
}
于 2012-05-10T06:09:50.450 に答える