Ant:关于dirsets的两个问题

时间:2012-03-15 17:51:09

标签: java apache ant

我对Apache Ant中的dirset type有两个问题。

  • dirset真的是一套,没有保证订单,还是保留了输入订单? 我想使用ant:contrib来迭代一组目录和订单问题,所以如果Ant的dirset不保留插入顺序,我还有哪些替代方案?
  • 如何测试dirset中是否包含某个目录?

4 个答案:

答案 0 :(得分:3)

<强> [编辑]

如果你看一下dirset source看起来它使用了java File.list(),其documentation表示没有gauranteed订单。 所以不,你绝对不能指望。但是,在回来之前,请致电Arrays.sort(files);见第1572行。


根据保留顺序我不能说,我担心没有保证,但通常只是保留文件系统顺序。

关于测试,我认为你想要,如果这个文件存在或者类似的东西,使用ant contrib进行操作,

<for param="directory">
<dirset dir="dirIneedtoexist">
</dirset>
<sequential>
     <!-- Stuff to do if it exists. -->          
</sequential>
</for>

如果dirset中没有任何内容,如果不做任何事情。

答案 1 :(得分:1)

关于dirset的Ant文档中没有太多内容。

如果您使用patternset,则无法保证订单。

如果使用include,列出单个目录而不是模式,dirset应该保留顺序。我确实会对此进行测试。

编辑添加:如果我错了,您可以编写自己的Ant custom task来保留包含目录的顺序。

答案 2 :(得分:1)

根据此page

  

dirset将目录集添加到隐式构建路径。请注意,目录将按顺序添加到构建路径中,因此如果顺序很重要,则应使用文件列表!

以下是有关如何使用FileList

的链接

答案 3 :(得分:0)

不,它不会保留秩序。

dirset的内容基于其parent class通过DirectoryScanner公开的内容。该扫描程序遍历文件系统,不按任何特定顺序执行。

它还使用File.list,它是秩序非确定性的来源:

  

无法保证结果数组中的名称字符串将以任何特定顺序出现;特别是,它们不会保证按字母顺序出现。