10

我的目标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必须引用 a fileset,而不是 a filelist。不过,我不能使用 a fileset,因为它需要一个dir属性,我无法设置该属性,因为源文件不共享基本目录。

当然,我可以在压缩它们之前将所有文件复制到一个公共目录,从而能够使用fileset,但我想知道是否有替代解决方案。

我正在使用 Ant 1.8.1

4

1 回答 1

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>

希望对你有效。

于 2010-12-30T19:14:59.200 回答