<loadfile property="UIfiles" srcfile="updated.txt">
<filterchain>
<linecontainsregexp>
<regexp pattern="ui/dev/"/>
</linecontainsregexp>
</filterchain>
</loadfile>
<echo file="Filelist.txt" append="true">${UIfiles}</echo>
我在build.xml文件中有上面的代码。 update.txt将包含一些文本,如Projects/accounts/spec/ui/dev/dpdl/abc.xml。如果文件中存在此语句,则上述代码按预期工作。如果在update.txt中没有正则表达式"ui/dev"匹配项,理想情况下UIfiles的值应为空,并且不应向Filelist.txt写入任何内容。但就我而言,"${UIfiles}"被附加到文件列表.txt中。请建议如何避免这种情况。谢谢。
按预期工作。 ${...} 是属性在未设置时的语法,因为您的文件不包含与正则表达式匹配的行。
你需要一些 if isset 条件,使用 Ant 1.9.3 和新的 if 除非功能:
<project
xmlns:if="ant:if"
xmlns:unless="ant:unless"
>
<loadfile property="UIfiles" srcfile="updated.txt">
<filterchain>
<linecontainsregexp>
<regexp pattern="ui/dev/"/>
</linecontainsregexp>
</filterchain>
</loadfile>
<echo file="Filelist.txt" append="true">${UIfiles} if:set="UIfiles"</echo>
</project>
否则,对于较旧的 Ant 版本,请使用:
<project>
<target name="checkfile">
<loadfile property="UIfiles" srcfile="updated.txt">
<filterchain>
<linecontainsregexp>
<regexp pattern="ui/dev/"/>
</linecontainsregexp>
</filterchain>
</loadfile>
</target>
<target name="appendfilelist" depends="checkfile" if="UIfiles">
<echo file="Filelist.txt" append="true">${UIfiles}</echo>
</target>
<project>