3
<concat destfile="${destFile}" fixlastline="yes">
    <filelist dir="." files="${filelist}"/>
</concat>

在上面的片段中,当无法访问/定位文件时,我希望concat任务失败。filelist请问实施它的最佳方法是什么?

4

1 回答 1

4

这是实现相同目的的一种方法 - 但通过在 concat 之前定义文件列表,并检查文件是否存在。

大纲:

  • 创建一个带有 id 的文件列表。
  • 从相同的文件列表创建一个类似的文件集。
  • 获取每个资源中的资源计数 - 文件集仅选择存在的文件。
  • 比较资源计数 - 如果它们不同,则某些文件不存在。

嵌入条件fail任务用于比较计数。如果通过,则执行 concat。

<filelist id="my.list" dir="." files="${filelist}" />
<fileset id="my.set" dir="." includes="${filelist}" />
<resourcecount refid="my.list" property="my.list.size" />
<resourcecount refid="my.set" property="my.set.size" />
<fail message="Only found ${my.set.size}/${my.list.size} files for concat!">
    <condition>
        <not>
            <equals arg1="${my.set.size}" arg2="${my.list.size}" />
        </not>
    </condition>
</fail>

<concat destfile="${destFile}" fixlastline="yes">
    <filelist refid="my.list" />
</concat>

要获取丢失的文件列表,请使用以下内容:

<difference id="missing">
    <resources refid="my.list"/>
    <resources refid="my.set"/>
</difference>

然后您可以将fail任务修改为:

<fail message="Missing files for concat: ${ant.refid:missing}">
于 2012-02-06T23:14:51.113 回答