Ant 是否保证文件集的顺序?
Does Ant guarantee order of filesets?
在我们的项目中,我们使用 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 配置文件的情况下解决这个问题?我们有很多。如果没有办法,我怎么能便宜到手呢?谢谢。
我不知道文件集的顺序是否有保证,但是复制任务的顺序是有保证的。
所以,按照 this answer 的建议,写几个复制任务可能是个好主意 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>
您可以将 sort
资源集合包裹在您的 fileset
周围,并确保以这种方式复制所使用的顺序。排序本身只喜欢将单个资源集合作为子元素,因此您需要将 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>
按名称对文件排序。
在我们的项目中,我们使用 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 配置文件的情况下解决这个问题?我们有很多。如果没有办法,我怎么能便宜到手呢?谢谢。
我不知道文件集的顺序是否有保证,但是复制任务的顺序是有保证的。 所以,按照 this answer 的建议,写几个复制任务可能是个好主意 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>
您可以将 sort
资源集合包裹在您的 fileset
周围,并确保以这种方式复制所使用的顺序。排序本身只喜欢将单个资源集合作为子元素,因此您需要将 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>
按名称对文件排序。