2012-05-08 1 views
0

일부 기능을 수행하기 위해 자체 ANT 작업을 작성했습니다. 그러나 Java 작업을 중첩 작업으로 호출하려면이 작업이 필요합니다. 그래서 난 내 빌드 파일에 다음 코드를 가지고 :사용자 지정 작업에서 중첩 된 작업을 실행하십시오.

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

내가 자바 작업을 실행하지만 mytask 완료하기 전에, 정리의 목적으로 완료된 후 코드의 조각을 실행하고 싶습니다.

이것은 깨진 디자인입니까? 빌드 파일에는 권장되지 않습니까? 그렇지 않은 경우 정리 방법을 실행하려면 어떤 방법을 사용해야합니까?

+0

그리고 한 가지 :'그릴 수 ... 사용자 정의 task' 또는 유사한 중첩 된 작업을 실행에 더 많은 관심이 Q & A의 제목을 변경합니다. – coolcfan

+0

감사합니다. coolcfan! – Neel

답변

1

org.apache.tools.ant.TaskContainer 인터페이스를 구현하고 자신의 addTask(Task task) 메서드를 작성하십시오. 예를 들어

(단지라는 작업 "자바"를해야) :

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 
} 
+0

네,이 코드는 중첩 된 작업을 추가하는 데 사용됩니다. 그러나 여기에 문제가 있습니다. 중첩 된 작업이 실행되기 전에'addTask' 메서드가 호출되기 때문에'cleanup' 메서드를 호출해야합니다. 자바 작업? – Neel

+0

@ 추가 'addTask' 그리고'task.execute'를 호출하는 것은 두 단계로 구분됩니다. 'addTask'는 Ant에 의해 호출되지만, 그것이 추가 될 때 중첩 된 작업이 실행된다는 것을 의미하지는 않습니다. 중첩 된 작업은'execute' 메서드를 호출 할 때까지 실행되지 않습니다. 내 업데이트 답변을 참조하십시오. – coolcfan

+0

감사합니다. coolcfan! – Neel