如何检查Ant构建中是否存在一组文件?

时间:2010-10-12 14:25:24

标签: ant file-exists

我想知道是否有办法使用Ant检查磁盘上是否有多个文件可用。 目前,我的任务看起来像这样:

<target name="copyArtworkToOutputDir" if="artworkContent">
  <copy todir="${imageOutputDir}" failonerror="true">
    <fileset dir="${sourceDir}" includesfile="${buildDir}/artworklist"/>
  </copy>
</target>

'artworklist'是早期在构建中创建的文件列表。我可以将它作为文件集传递给'复制'任务,而我应该最终得到一个包含列表中所有文件的文件夹。不幸的是,有时这不起作用,并且由于缺少资源,构建可能在以后的步骤中显着失败。

我已经尝试将'failonerror'设置为true,希望如果源位置中不存在artworklist中指定的文件,它将抛出异常。无论出于何种原因,这似乎并不像我期望的那样有效。

因此,我的下一个想法是使用类似“可用”任务的东西来验证图稿列表的内容现在是否存在于输出位置。虽然可用似乎仅限于单个文件。所以我在这里也有点死了。

有人可以提出一种方法,我可以验证复制后我期望在${buildDir}内的所有文件是否真的存在?在这一点上,我正在考虑一个自定义的Ant任务,但也许有更明显的东西。

1 个答案:

答案 0 :(得分:1)

不是使用仅包含文件系统中存在的文件的fileset,而是默默地忽略那些不存在的文件,请尝试filelist。文件列表可以包含文件系统中不存在的文件,因此可以用于检查 - 当Ant尝试处理文件列表中不存在的文件时会抛出错误。

小例子:

<filelist
    id="artworkfiles"
    dir="${src.dir}"
    files="foo.xml,bar.xml"/>

<copy todir="${dest.dir}" failonerror="true" >
    <filelist refid="artworkfiles" />
</copy>

...
BUILD FAILED
build.xml:14: Warning: Could not find resource file ".../src/bar.xml" to copy.

$ ls src
foo.xml    # No bar.xml in src dir.