【问题标题】:Does Ant guarantee order of filesets?Ant 是否保证文件集的顺序?
【发布时间】:2016-04-22 14:18:28
【问题描述】:

在我们的项目中,我们使用 Ant 来分发文件。文件有层次结构,它们会覆盖上一层的文件。像这样:默认 - level1 - level2。目前是这样的:

<copy todir="...">
 <fileset dir="${root}/default" includes="**/*" excludes="file1" />
 <fileset dir="${root}/level1" includes="**/*" />
 <fileset dir="${root}/level2" includes="**/*" excludes="file2"/>
</copy>

所以我们希望所有文件夹都包含同名文件,它将取自二级目录。

不久前,我们使用另一个 Java 版本迁移到一个新的构建框,我们发现文件集的顺序被破坏了。

有没有办法在不修改 ant 配置文件的情况下解决这个问题?我们有很多。如果没有办法,我怎么能便宜呢?谢谢。

【问题讨论】:

标签: java ant copy fileset


【解决方案1】:

我不知道文件集的顺序是否被隔离,但复制任务的顺序是。 所以,按照this answer的建议,写几个overwrite="true"的copy任务可能是个好主意:

<copy todir="...">
  <fileset dir="${root}/default" includes="**/*" excludes="file1" />
</copy>
<copy todir="...">
  <fileset dir="${root}/level1" includes="**/*" overwrite="true" />
</copy>
<copy todir="...">
  <fileset dir="${root}/level2" includes="**/*" excludes="file2" overwrite="true" />
</copy>

【讨论】:

    【解决方案2】:

    您可以将sort 资源集合包装在您的filesets 周围,并确保以这种方式复制使用的顺序。排序本身只喜欢单个资源集合作为子元素,因此您需要将fileset 包装在union 或resources 容器中。

    见http://ant.apache.org/manual/Types/resources.html#sort

    类似

    <sort>
      <resources>
        <fileset dir="${root}/default" includes="**/*" excludes="file1" />
        <fileset dir="${root}/level1" includes="**/*" />
        <fileset dir="${root}/level2" includes="**/*" excludes="file2"/>
      </resources>
      <name/>
    </sort>
    

    按名称对文件进行排序。

    【讨论】:

    • "sort 只需要一个嵌套的资源集合。" - 我不能将两个文件集传递给它
    • 但是 'fileset's 的 union - 或者如果您关心重复名称,则使用 filesets 的 resources。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-02
    • 2019-12-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多