我有一个目标,它有几个复制任务;它基本上将常见的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
属性的方法,具体取决于是否实际更改了任何文件。
谢谢,
以太
答案 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任务,做你想要的。这需要更多的工作。