我正在尝试读取目录中一组文件的名称,并将正则表达式应用于这些名称,并获取带有逗号分隔值的列表。文件名的格式为build_level1_D1.properties,build_level1.D2.properties,build_level2.D1.properties等... 我需要读取所有文件名并应用正则表达式并解析名称以获得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>
答案 0 :(得分: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一样,groovy需要一个额外的jar。我通常包含一个“bootstrap”目标来安装它:
<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>