Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ant 在自定义任务中运行嵌套任务_Ant_Nested_Antbuilder - Fatal编程技术网

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

Ant 在自定义任务中运行嵌套任务,ant,nested,antbuilder,Ant,Nested,Antbuilder,我已经编写了自己的ANT任务来执行一些功能。但是,我需要这个任务来调用java任务作为嵌套任务。因此,我的构建文件中有以下代码: <mytask ... > <java ... /> </mytask> 我希望在java任务完成执行之后,但在mytask完成之前运行一段代码,以便进行清理 这是一个坏的设计,不建议在构建文件中使用吗?如果没有,我应该使用哪种方法来运行清理方法?让您的任务实现org.apache.tools.ant.TaskContai

我已经编写了自己的ANT任务来执行一些功能。但是,我需要这个任务来调用java任务作为嵌套任务。因此,我的构建文件中有以下代码:

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

我希望在java任务完成执行之后,但在
mytask
完成之前运行一段代码,以便进行清理


这是一个坏的设计,不建议在构建文件中使用吗?如果没有,我应该使用哪种方法来运行清理方法?

让您的任务实现
org.apache.tools.ant.TaskContainer
接口,编写您自己的
addTask(task task)
方法

例如(它应该只接受一个名为“java”的任务):


还有一件事:将此问答的标题更改为“在自定义任务中运行嵌套任务”或类似内容。。。可能会引起更多注意。是的,我有此代码来添加嵌套任务,但问题是:
addTask
方法仅在执行嵌套任务之前被调用,那么我应该在哪里调用
cleanup
方法,以便在java任务之后调用它呢?@Neel
addTask
和调用
task.execute
是两个独立的步骤<代码>添加任务由Ant调用,但这并不意味着在添加嵌套任务时执行该任务。在调用其
execute
方法之前,嵌套任务不会运行。查看我的更新答案。如果我理解正确,您应该在循环中调用
task.perform()
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.");
    }
}
// your custom task's execute...
public void execute() {
    //do something

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

    //do something
}