如何在最新的 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】:不要使用<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>
希望它对你有用。
【讨论】:
它有效,谢谢。我不知道如何将此主题标记为您“已解决”,抱歉。 答案的“票数”下方有一个白色的检查。点击复选标记,它会变成绿色,表示问题已被回答。以上是关于如何在最新的 Ant 命令中使用文件列表作为文件集?的主要内容,如果未能解决你的问题,请参考以下文章