2013-08-13 3 views
0

디렉토리에있는 파일 세트의 이름을 읽고 그 이름에 regex를 적용하고 쉼표로 구분 된 값으로 목록을 얻으려고합니다. 파일의 이름은 build_level1_D1.properties, build_level1.D2.properties, build_level2.D1.properties 등의 형식입니다 ... 모든 파일 이름을 읽고 regex를 적용하고 이름을 파싱하여 level1_D1, level1_D2를 가져와야합니다. , level2_D1 등 .. 내가 속성 이름 = "build.levels"값 = "level1_D1, level1_D2, level2_D1"의 형식으로 필요합니다. 이것은 내가 시도한 것입니다. 포인터와 도움이 필요합니다.Ant 디렉토리와 정규식에서 파일 읽기

<target name="build-levels-all"> 
      <for param="program"> 
       <path><fileset dir="${root.build.path}/build" includes="*"/> 
       </path> 
       <sequential> 
        <propertyregex override="yes" property="file" input="@{program}" regexp="build\_([^\.]*)" select="\1" /> 
        <echo>${file}</echo> 
       </sequential> 
      </for> 
      <echo>${program}</echo> 
<-- This prints the files regexed Level1_D1, level2_D2 etc....But i need to capture it in the format of <property name="build.levels" value="level1_D1,level1_D2,level2_D1" /> --> 
      </target> 

답변

1

groovy과 같은 임베디드 스크립팅 언어를 사용하여 이러한 종류의 복잡한 논리를 수행해보십시오.

<target name="process-files"> 
     <taskdef name="groovy" classname="org.codehaus.groovy.ant.Groovy"/> 

     <groovy> 
     def list = [] 

     new File('build').eachFile() { 
      def matcher = it.name =~ /(build_level\d_D\d).properties/ 
      list.add matcher[0][1] 
     } 

     properties."build.levels" = list.join(",") 
     </groovy> 
    </target> 

    <target name="doSomething" depends="process-files"> 
     <echo>${build.levels}</echo> 
    </target> 

그루비에는 ant-contrib와 마찬가지로 추가 jar가 필요합니다. 보통 "부트 스트랩"타겟을 설치하여 다음을 설치합니다 :

<target name="bootstrap"> 
     <mkdir dir="${user.home}/.ant/lib"/> 
     <get dest="${user.home}/.ant/lib/groovy-all.jar" src="http://search.maven.org/remotecontent?filepath=org/codehaus/groovy/groovy-all/2.1.6/groovy-all-2.1.6.jar"/> 
    </target>