2

在我们的项目中,我们使用 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 配置文件的情况下解决这个问题?我们有很多。如果没有办法,我怎么能便宜呢?谢谢你。

4

2 回答 2

1

我不知道文件集的顺序是否被隔离,但复制任务的顺序是。因此,按照这个答案的建议,用 overwrite="true" 编写几个复制任务可能是个好主意:

<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>
于 2016-04-22T14:41:45.907 回答
1

sort您可以将资源集合包装在您fileset的 s 周围,并确保以这种方式复制使用的顺序。sort 本身只喜欢单个资源集合作为子元素,所以需要将fileset里面的 aunionresources容器包裹起来。

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>

按名称对文件进行排序。

于 2016-04-23T06:56:37.207 回答