如何解决这个ANT问题?

时间:2014-09-04 09:32:05

标签: ant build

<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文件中有上面的代码。 updated.txt将包含一些文本,如Projects / accounts / spec / ui / dev / dpdl / abc.xml。如果该语句存在于该文件中,则上述代码按预期工作。如果正则表达不匹配&#34; ui / dev&#34;在updated.txt中,理想情况下UIfiles的值应为空,不应向Filelist.txt写入任何内容。但在我的情况下&#34; $ {UIfiles}&#34;将被附加到Filelist.txt中。请建议如何避免这种情况。谢谢。

1 个答案:

答案 0 :(得分:0)

按预期工作。 $ {...}是未设置时属性的语法,因为 您的文件不包含与正则表达式匹配的行。

你需要一些if isset条件,Ant 1.9.3和new if unless feature

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