2011-11-09 3 views
4

나는 source-locations라는 속성을 가지고 있으며 소스 코드를 찾을 수있는 쉼표로 구분 된 폴더 목록이 들어 있습니다.폴더 하위 폴더를 포함하는 dirset 만들기

source-locations=src,other_src_dir,yet_another_dir 

내 개미 작업 중 하나에서 나는이 같은 dirset를 사용

<dirset dir="${basedir}" includes="${source-locations}"/> 

내 문제는이 경우 소스 위치 속성에 나열된 디렉토리가 dirset의 일부가 될 것입니다 그 디렉토리의 모든 하위 디렉토리도 필요합니다. 이것을 어떻게 할 수 있습니까?

모든 의견을 환영합니다. 감사!

답변

1

이 작업을 시도 할 수 있습니다 :

<taskdef resource="net/sf/antcontrib/antcontrib.properties" classpathref="path.antcontrib"/> 

<target name="test"> 
    <property name="source-locations" value="src,other_src_dir,yet_another_dir"/> 

    <!--Replace comma symbol to the `/**,` string and save new expression in to the source-locations_mod property--> 
    <propertyregex property="source-locations_mod" 
      input="${source-locations}" 
      regexp="," 
      replace="/**," 
      global="true" /> 

    <!--Add finally `/**` string to the source-locations_mod property. Was used var task to prevent property immutable --> 
    <var name="source-locations_mod" value="${source-locations_mod}/**"/> 

    <!--New source-locations_mod property was used--> 
    <dirset id="source.set" dir="${root.folder}" includes="${source-locations_mod}"/> 

    <!--Check the result--> 
    <pathconvert pathsep="${line.separator}" 
      property="dir.name" 
      refid="source.set"> 
     <mapper type="identity" /> 
    </pathconvert> 
    <echo>Folders: ${dir.name}</echo> 
</target> 

나는 propertyregexAnt-Contrib 라이브러리에서 var 작업을 사용했습니다.

+0

우수! 이 작품! Alex 대단히 감사합니다! – Liz

1

아래의 예.

<mkdir dir="dir1" /> 
<mkdir dir="dir2" /> 
<mkdir dir="dir3" /> 
<mkdir dir="dir1/dir1a" /> 
<mkdir dir="dir1/dir1b" /> 
<mkdir dir="dir1/dir1c" /> 
<mkdir dir="dir2/dir2e" /> 
<mkdir dir="dir2/dir2f" /> 
<mkdir dir="dir2/dir2g" /> 
<mkdir dir="dir3/dir3h" /> 
<mkdir dir="dir3/dir3i" /> 
<mkdir dir="dir3/dir3j" /> 

<property name="source-locations" value="dir1,dir2,dir3" /> 

<pathconvert property="source-locations_mod" pathsep=","> 
    <regexpmapper from="^(.*)$" to="\1/\*\*" handledirsep="true" /> 
    <map from="${basedir}/" to="" /> 
    <dirset dir="${basedir}" includes="${source-locations}" /> 
</pathconvert> 
<echo message="source-locations_mod: ${source-locations_mod}" /> 

<dirset id="dirset" dir="${basedir}" includes="${source-locations_mod}"/> 

<property name="dirs" refid="dirset" /> 
<echo message="dirs: ${dirs}" /> 

+0

그럴 수는 있지만 그 방법을 잘 모릅니다 (속성 파일의 속성 값을 변경할 수는 없습니다)./** 부분을 추가하는 데에는 propertregex를 사용 하시겠습니까? – Liz