如何在uptodate Ant命令中使用filelist作为文件集?

时间:2010-12-30 17:25:36

标签: ant dependencies filelist fileset

我的目标是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

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>

希望它适合你。