Ant:如何知道十个复制任务中的至少一个复制任务是否实际复制了一个文件

时间:2010-12-26 13:10:11

标签: java ant copy if-statement properties


我有一个目标,它有几个复制任务;它基本上将常见的jar复制到我们的应用程序集,从集中位置到应用程序的lib文件夹 看到这是一个常规的复制任务,只有当jar比当前lib文件夹中的jar更新时才会复制它。
这是build.xml中的相关部分:

<target name="libs"/>  
  <copy file=... />  
  <copy file=... />  
  <copy file=... />  
  <antcall target="clean_compiled_classes"/>  
</target>  
<target name="clean_compiled_classes" if="anyOfTheLibsWereCopied">  
  <delete .../>  
</target>

我正在寻找一种在anyOfTheLibsWereCopied目标中的ant调用之前设置libs属性的方法,具体取决于是否实际更改了任何文件。

谢谢,
以太

1 个答案:

答案 0 :(得分:2)

我建议你看一下Uptodate任务。我之前从未使用过它,但我猜你要做的事情将按以下方式实施:

<target name="libs"/>
  <uptodate property="isUpToDate">
    <srcfiles dir="${source.dir}" includes="**/*.jar"/>
    <globmapper from="${source.dir}/*.jar" to="${destination.dir}/*.jar"/>
  </uptodate>
  <!-- tasks below will only be executed if
       there were libs that needed an update -->
  <antcall target="copy_libs"/>  
  <antcall target="clean_compiled_classes"/>  
</target>

<target name="copy_libs" unless="isUpToDate">  
  <copy file=... />  
  <copy file=... />  
  <copy file=... />
</target>

<target name="clean_compiled_classes" unless="isUpToDate">  
  <delete .../>
</target>

你的另一个选择是实现你自己的ant任务,做你想要的。这需要更多的工作。