我试图使用反贡献任务从属性文件中提取一些值,但我不断得到下面的错误。我已经尝试了很多不同的搜索结果的想法,但我仍然没有进一步的进展。
xml:9: Property '${constituents}' is not defined.
我的构建文件是:
<project name="hello" default="foo">
<taskdef resource="net/sf/antcontrib/antcontrib.properties"/>
<target name="foo">
<property file="props.file"/>
<propertyselector property="constituents" match="bDIR1/workDir([^.]+)b" select=" " casesensitive="false"/>
<foreach list="${constituents}" target="print.name" param="myparam"/>
</target>
<target name="print.name">
<propertycopy property="key" from="${myparam}"/>
<echo message="${key}"/>
</target>
我的属性文件是:
identifier=ABC
constituents="ABC_Section"
constituents="$constituents DIR1/workDir/sec1/subSec1/File1"
constituents="$constituents DIR1/workDir/sec2/File2"
constituents="$constituents DIR1/workDir/sec3/File3"
constituents="$constituents DIR1/workDir/lib"
constituents="$constituents DIR1/OTHER"
我实际上是在尝试提取所有以
开头的测试DIR1/workDir/......
我希望有人能给我一个指针,告诉我哪里出错了。
谢谢
参见propertyselector手册:
选择与给定正则表达式匹配的属性名,并以带分隔符的列表形式返回
所以你做错了——这是选择属性名称,而不是值。当您有一些属性与名称共享一个模式时,应该使用它,请参阅手册页中的示例。
另一种(或典型的Ant)方法:
constituents=ABC_Section,
DIR1/workDir/sec1/subSec1/File1,
DIR1/workDir/sec2/File2,
DIR1/workDir/sec3/File3,
DIR1/workDir/lib,
DIR1/OTHER
然后<for list="${constituents}" param="myparam">
<sequential>
<if>
<matches string="@{myparam}" pattern="^DIR1/workDir/.+" casesensitive="false" />
<then>
<!-- deal with your property -->
<echo>@{myparam}</echo>
</then>
</if>
</sequential>
</for>
我没有在matches
中测试正则表达式,您可能需要修复它。