【问题标题】:How can I check if a set of files exists in an Ant build?如何检查 Ant 构建中是否存在一组文件?
【发布时间】:2011-04-24 08:41:59
【问题描述】:

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

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

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

我尝试将“failonerror”设置为 true,希望在源位置中不存在 artartlist 中指定的文件时抛出异常。无论出于何种原因,这似乎都没有按我的预期工作。

所以,我的下一个想法是使用类似“可用”任务的方法来验证艺术品列表的内容现在是否存在于输出位置。可用似乎仅限于单个文件。所以我在这里也有点死胡同了。

有人可以提出一种方法来验证我希望在复制后位于${buildDir} 中的所有文件实际上都存在吗?在这一点上,我正在考虑一个自定义 Ant 任务,但也许还有更明显的东西。

【问题讨论】:

    标签: ant file-exists


    【解决方案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.
    

    【讨论】:

    • 所以没有办法用文件集做到这一点?因为将所有文件添加为 xml 属性可读性较差。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-17
    • 2011-06-23
    • 1970-01-01
    • 1970-01-01
    • 2011-11-01
    相关资源
    最近更新 更多