我的目标是build.xml
,可以创建一个Zip文件。为了避免在没有更新文件的情况下创建Zip,我想事先检查更新。 AFAIK,uptodate
是要使用的任务。
以下是相关(简化)脚本部分:
<filelist id="zip-files">
<file name="C:/main.exe" />
<file name="D:/other.dll" />
</filelist>
<target name="zip" depends="zip-check" unless="zip-uptodate">
<zip destfile="${zip-file}" >
<filelist refid="zip-files" />
</zip>
</target>
<target name="zip-check">
<uptodate property="zip-uptodate"
targetfile="${zip-file}">
<srcfiles refid="zip-files" />
</uptodate>
</target>
但是,uptodate
失败,因为srcfiles
必须引用fileset
,而不是filelist
。不过,我不能使用fileset
,因为它需要dir
属性,我无法设置,因为源文件不共享基本目录。
当然,我可以在压缩它们之前将所有文件复制到公共目录,因此可以使用fileset
,但我想知道是否有替代解决方案。
我正在使用Ant 1.8.1
答案 0 :(得分:15)
请尝试使用<srcfiles>
,而不要使用<srcresources>
。 <srcfiles>
必须是文件集,但<srcresource>
可以是任何资源集合的联合,并且应该包含filelist
。
我现在不能做任何测试,但看起来应该是这样的:
<filelist id="zip-files">
<file name="C:/main.exe" />
<file name="D:/other.dll" />
</filelist>
<target name="zip" depends="zip-check" unless="zip-uptodate">
<zip destfile="${zip-file}" >
<filelist refid="zip-files" />
</zip>
</target>
<target name="zip-check">
<union id="zip-union">
<filelist refid="zip-files"/>
</union>
<uptodate property="zip-uptodate"
targetfile="${zip-file}">
<srcresources refid="zip-union" />
</uptodate>
</target>
希望它适合你。