2012-10-31 2 views
1

차별적 인 빌드를 지원하기 위해 기존의 개미 스크립트를 수정 중입니다. 이를 위해 수정 된 파일 만 찾기 위해 파일 세트에서 수정 된 선택기를 사용했습니다. 하지만 문제는 내가 전체 빌드를 할 때 일부 속성이나 param을 기반으로 수정 된 필터를 우회해야 할 때입니다. 아래 그림과 같이. 어쨌든 그렇게 할 수 있습니까? 내가 dt 타겟을 사용하여 위의 개미 스크립트를 호출하면조건에 따라 개조 된 선택기 포함

<project name="test" default="dt" basedir="."> 
    <target name="dt1"> 
     <copy todir="ant_temp2"> 
      <fileset dir="ant_temp1"> 
       <if> 
        <equals arg1="${ABC}" arg2="true" /> 
        <then> 
         <modified update="true" /> 
        </then> 
       </if> 
       <exclude name="*.txt"/> 
      </fileset> 
     </copy> 
    </target> 

    <target name="dt"> 
     <antcall target="dt1"> 
      <param name="ABC" value="true" /> 
     </antcall> 
    </target> 

    <target name="dt2"> 
     <antcall target="dt1" />  
    </target> 
</project> 

는 내가 modified을 고려해야하고, excludefileset에서 작업. dt2을 사용하여 호출하는 경우 fileset 작업에서 exclude 만 고려해야합니다.

위의 스크립트를 사용할 수 없습니다. fileset은 중첩 된 if 작업을 지원하지 않습니다. 그래서 나는 이것을하기위한 대안적인 방법을 찾고있다. 이를위한 몇 가지 방법을 제안하십시오.

P.S : 나는 modifiedexcludefileset에서 만 exclude 또 다른 목표를 포함한 동일한 복사 작업 하나에 두 개의 목표를 만들고 싶지 않아.

답변

0

내 요구 사항을 달성하기 위해 아래 ant 스크립트를 사용했습니다.

<project name="test" default="dt" basedir="."> 
    <patternset id="fs1"> 
     <exclude name="*.txt"/> 
    </patternset > 

    <target name="dt1"> 
     <copy todir="ant_temp2"> 
      <fileset dir="ant_temp1"> 
       <patternset refid="fs1" /> 
      </fileset> 
     </copy> 
    </target> 

    <target name="dt3"> 
     <copy todir="ant_temp2"> 
      <fileset dir="ant_temp1"> 
       <modified update="true" /> 
       <patternset refid="fs1" /> 
      </fileset> 
     </copy> 
    </target> 
</project> 

나는 재사용 패턴을 설정하고 개발자가 설정하는 패턴으로 자신의 제외를 업데이트하고 난 그 패턴을 재사용하고이 정상적으로에 대한 설정 및 증분 빌드를 만들었습니다.

0

ifunless 속성을 targets에 사용하면 해당 속성의 실행을 조건부로 지정할 수 있습니다. 조건부를 자신의 대상으로 이동하고 (아직 수행하지 않은 경우) if 또는 unless 조건을 대상에 추가해야합니다.

귀하의 예에서 완전히 명확하지는 않지만 modified 부분을 포함하여 두 개의 대상에 copy이 포함될 수 있습니다. 이 경우 각각의 대상을 같은 속성 (조건부 : if, 나머지 하나는 unless)으로 조건부로 만들 수 있습니다.

+0

안녕하세요 sudocode, 도와 줘서 고맙지 만 복사 작업에 두 개의 타겟을 만들고 싶지 않습니다. 하나는'modified'와'exclude'이고 다른 하나는'exclude' 만 들어 있습니다. 기존 스크립트이고 개발자는 정기적으로 'exclude'를 더 추가하십시오. 두 대상을 만들면 두 곳에서'제외 '를 추가해야합니다. – Suresh

관련 문제