在自定义任务中运行嵌套任务



我已经编写了自己的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>任务,只需循环访问列表并为每个任务调用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
}

最新更新