Ant读取目录和regex中的文件



我正在尝试读取目录中一组文件的名称,并将regex应用于这些名称,并获得一个包含逗号分隔值的列表。文件名的格式为build_level1D1.properties、build_level1.D2.properties、build_llevel2.D1.properties等。。。我需要读取所有的文件名,应用regex并解析名称以获得level1_D1、level1_D2、level2_D1等。我需要它的格式为property name="build.levels"value="level1 _D1、level1 _D2、level2 _D1"这就是我尝试的。需要一些指导和帮助。

    <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>

尝试使用像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_leveld_Dd).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一样,groovy需要一个额外的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>

相关内容

  • 没有找到相关文章

最新更新