Ant是否保证文件集的顺序?

时间:2016-04-22 14:18:28

标签: java ant copy fileset

在我们的项目中,我们使用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>

因此我们希望所有文件夹都包含同名文件,它将从level2目录中获取。

不久前我们转移到另一个版本的Java的新构建盒,我们发现文件集的顺序已经破坏。

有没有办法在不修改ant配置文件的情况下修复此问题?我们有很多。如果没有办法,我怎么能把它廉价出售?谢谢。

2 个答案:

答案 0 :(得分:1)

我不知道文件集的顺序是否得到保证,但复制任务的顺序是。 因此,根据this answer的建议,使用overwrite =&#34; true&#34;来编写几个复制任务可能是个好主意:

<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>

答案 1 :(得分:1)

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

请参阅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>

按名称对文件进行排序。