如何在最新的 Ant 命令中使用文件列表作为文件集?

Posted

技术标签:

【中文标题】如何在最新的 Ant 命令中使用文件列表作为文件集?【英文标题】:How to use filelist as fileset in uptodate Ant command? 【发布时间】:2011-06-01 16:10:53 【问题描述】:

我有一个目标 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】:

不要使用&lt;srcfiles&gt;,而是尝试使用&lt;srcresources&gt;&lt;srcfiles&gt; 必须是一个文件集,但 &lt;srcresource&gt; 可以是任何资源集合的联合,并且应该包括一个 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>

希望它对你有用。

【讨论】:

它有效,谢谢。我不知道如何将此主题标记为您“已解决”,抱歉。 答案的“票数”下方有一个白色的检查。点击复选标记,它会变成绿色,表示问题已被回答。

以上是关于如何在最新的 Ant 命令中使用文件列表作为文件集?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Ant 任务中加载文件列表作为资源?

如何使用 Ant 删除除最新的 2 个文件之外的所有文件

Ant:如何从目录中选择最新的修改文件?

使用Ant组合文件集

Angular入门,搭配ant简单使用

如何把shell 命令执行的结果放到指定的日志文件中? 例如ant,sh命令