2011-12-06 2 views
4

모든 대상 외부의 디렉토리에 일련의 파일을 복사하는 기본 ant 스크립트가 있습니다. 그런 다음 종속성에 관계없이 모든 대상을 실행 한 후에 해당 파일을 정리하고 싶습니다. 내가 가지고있는 주요 문제는 'deploywar'가 다음에 호출 될 수 있기 때문에 대상이 '컴파일'또는 'deploywar'일 수 있으므로 '덤프'대상을 '컴파일'에서 '맹목적으로'호출 할 수 없다는 것입니다. 그리고 전화가 걸리지 않을 수도 있기 때문에 나는 단지 'deploywar'에서 맹목적으로 전화 할 수 없습니다. 필요한 다른 모든 대상이 완료된 후 호출 될 대상을 정의하려면 어떻게합니까 (실패했거나 성공했는지)? 아래의 'cleanUpLib'대상이 나는 모든 후에 호출하고 싶은 대상입니다/어떤 작업을 실행 한 : 당신이 빌드 수신기 또는 일부를 사용할 수 있습니다종속성에 관계없이 최종 ant 대상을 강제 실행하는 방법

<project name="proto" basedir=".." default="deploywar"> 
... 
<copy todir="${web.dir}/WEB-INF/lib"> 
    <fileset dir="${web.dir}/WEB-INF/lib/common"/> 
</copy> 
<target name="compile"> 
    <!-- Uses ${web.dir}/WEB-INF/lib --> 
    .... 
</target> 

<target name="clean" description="Clean output directories"> 
    <!-- Does not use ${web.dir}/WEB-INF/lib --> 
    .... 
</target> 

<target name="deploywar" depends="compile"> 
    <!-- Uses ${web.dir}/WEB-INF/lib --> 
    .... 
</target> 

<target name="cleanUpLib"> 
    <!-- Clean up temporary lib files. --> 
    <delete> 
     <fileset dir="${web.dir}/WEB-INF/lib"> 
      <include name="*.jar"/> 
     </fileset> 
    </delete> 
</target> 

답변

2

빌드 리스너 솔루션 Rebse가 지적한 것은 유용 해 보입니다 (+1).

당신이 "과부하"당신의 목표, 같은 것을하는 것입니다 고려할 수있는 대안 :

<project default="compile"> 

    <target name="compile" depends="-compile, cleanUpLib" 
     description="compile and cleanup"/> 

    <target name="-compile"> 
     <!-- 
      your original compile target 
     --> 
    </target> 

    <target name="deploywar" depends="-deploywar, cleanUpLib" 
     description="deploywar and cleanup"/> 

    <target name="-deploywar"> 
     <!-- 
      your original deploywar target 
     --> 
    </target> 

    <target name="cleanUpLib"> 
    </target> 

</project> 

당신은 정말 과부하 물론 하나의 Ant 빌드 파일 때문에 대상 이름이 있어야합니다 수 있습니다 다른.

(나는 "-"접두사를 사용하여 대상을 "비공개"로 만들었습니다. 즉, 쉘 스크립트 arg 처리로 인해 명령 줄에서 호출 할 수 없습니다. Ant에서 성공적으로 두 번 클릭하십시오.

+0

작동하지 않습니다. -compile 또는 -deploywar에 예외가 발생하면 cleanUpLib가 실행되지 않습니다. – rreyes1979

관련 문제