2010-01-26 2 views
5

ant 1.6.2를 사용 중이고 소스와 대상 디렉토리를 비교하는 작업을 설정하려고합니다. 소스 디렉토리에 존재하는 모든 하위 디렉토리를 식별하고 대상 디렉토리의 하위 디렉토리를 삭제합니다.파일 세트를 사용하여 개미에서 하위 디렉토리를 어떻게 선택합니까?

소스 디렉토리에 하위 디렉토리 sub1, sub2 및 sub3이 있고 대상 디렉토리에 sub1, sub2, sub3 및 sub4가있는 경우 sub1, sub2 및 sub3을 삭제하고 싶습니다. 목표물.

FileSelector를 사용하여 대상에있는 모든 디렉터리를 식별 할 수 있다고 생각했습니다. 그러나 < 형식의 파일 선택기를 사용하여 디렉토리에 대한 일치 항목을 반환 할 수는 없습니다. ,

<fileset id="dirSelector" dir="${install.dir}"> 
    <type type="dir"/> 
</fileset> 
<property name="selected" refid="dirSelector" /> 
<echo>Selected: ${selected}</echo> 

을하지만 :

<fileset id="dirSelector" dir="${install.dir}"> 
    <type type="dir"/> 
    <present targetdir="${dist.dir}"/> 
</fileset> 

난 그냥 소스 디렉토리에 존재하는 디렉토리를 나열하고 그들을 밖으로 인쇄하려고에 의해 시작 :

궁극적으로 내가 뭔가를 할 거라고 생각 디렉토리에 설정된 타입 셀렉터로 인쇄 된 것이 전혀 없다. 유형을 파일로 변경하면 파일이 인쇄됩니다.

내가하려는 일을 수행하는 더 좋은 방법이 있습니까? 유형 선택기를 사용하면서 뭔가가 누락 되었습니까?

답변

4

사용자 지정 Ant 작업을 작성하지 않고도이 작업은 약간 복잡 할 것입니다. 당신이 행복하다면 ant-contrib 라이브러리를 사용하려면 다음 트릭을 수행해야합니다. 약간의 해킹 (특히 ​​속성을 사용하는 방식)이지만 괜찮습니다.

<project name="stackoverflow" default="delete_target_dirs"> 

    <taskdef resource="net/sf/antcontrib/antlib.xml"> 
    <classpath> 
     <pathelement location="ant-contrib-1.0b3.jar"/> 
    </classpath> 
    </taskdef> 

    <property name="src.dir" value="src"/> 
    <property name="target.dir" value="target"/> 

    <target name="delete_target_dirs"> 

    <for param="file"> 
     <path> 
     <dirset dir="${src.dir}"> 
      <include name="**"/> 
     </dirset> 
     </path> 

     <sequential> 
     <basename property="@{file}_basename" file="@{file}" /> 
     <available property="@{file}_available" file="${@{file}_basename}" filepath="${target.dir}" /> 
     <if> 
      <equals arg1="${@{file}_available}" arg2="true"/> 
      <then> 
      <delete verbose="true"> 
       <dirset dir="${target.dir}" includes="${@{file}_basename}"/> 
      </delete> 
      </then> 
     </if>     
     </sequential> 
    </for> 

    </target> 

</project> 
+1

도움 주셔서 감사합니다. 나는 현재 ant 개관 라이브러리를 사용하지 않으므로 먼저 제안한 맞춤 작업 경로를 시도 할 것이라고 생각했습니다. 결국 꽤 쉽게 끝나고 멋지게 마무리되었습니다. 감사. –

+0

@EricRosenberg 사용자 지정 작업을 대답으로 게시 할 수 있습니까? 그것은 SO와 함께 잘 작동하며, 우리가 찾고있는 것이 될 것입니다. –

+0

@OzairKafray 죄송합니다. 그러나 더 이상 사용자 정의 작업 구현에 액세스 할 수 없습니다. –