[英]Does Ant guarantee order of filesets?
在我们的项目中,我们使用Ant分发文件。 文件存在层次结构,它们会覆盖上一级的文件。 像这样:默认-级别1-级别2。 目前已通过以下方式实现:
<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 config文件? 我们有很多。 如果没有办法,我怎么能便宜地买到它? 谢谢。
我不知道文件集的顺序是否被隔离,但是复制任务的顺序是。 因此,按照此答案的建议,使用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>
您可以在fileset
集周围包装sort
资源集合,并确保通过这种方式复制使用的顺序。 排序本身只喜欢一个单一的资源集合的子元素,所以你需要用的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>
按名称对文件排序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.