2012-03-15 137 views
6

我有兩個關於Apache Ant中的dirset type的問題。Ant:兩個有關dirset的問題

  • 確實是一個dirset集合,沒有順序保證,還是保留輸入順序? 我想使用ant:contrib遍歷一組目錄和順序問題,所以如果Ant的dirset不保留插入順序,我有什麼替代方法?
  • 如何測試某個目錄是否包含在dirset中?

回答

3

[編輯]

如果你看一下dirset source看起來它使用Java File.list(),其documentation指出,沒有gauranteed秩序。 所以不,你絕對不能指望。 然而,在返回前調用Arrays.sort(files);見1572


按維持秩序我不能說,我敢大膽地說也不能保證,但它通常只是碰巧保留文件系統命令行。

至於測試,我想你想,如果這個文件存在或類似的東西,用螞蟻的contrib做動作,

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

如果沒有什麼,如果什麼都不會做的dirset。

1

有關dirset的Ant文檔沒有太多內容。

如果您使用patternset,則不能保證訂單。

如果您使用include,列出單個目錄而不是模式,dirset應保留順序。可以肯定的是,我會測試這個。

編輯補充:如果我錯了,您可以編寫自己的Ant custom task以保留包含目錄的順序。

+0

鏈接我太早說話。正如Andrew指出的那樣,插入的文件是[sorted](http://javasourcecode.org/html/open-source/ant/ant-1.6.4/org/apache/tools/ant/DirectoryScanner.java.html#line。 1299),因此不會保留廣告訂單。 – 2012-03-15 18:29:31

+0

@Mike Samuel:數組排序是處理包含模式的方法。我不得不花費更多的時間研究dirset源代碼。測試我所說的話會更快。 – 2012-03-15 18:33:27

+0

沒有通過目錄掃描程序和沒有這樣的測試的包含文件的代碼路徑,你的答案似乎內容免費。 – 2012-03-15 19:27:00

0

不,它不保存順序。

dirset的內容基於parent class通過DirectoryScanner公開的內容。該掃描程序遍歷文件系統,並且不以任何特定順序執行。

它還使用File.list這是爲了非確定性的來源:

沒有保證所得到的數組中的名稱字符串會出現在任何特定的順序;他們並不特別保證按字母順序出現。

+0

他們[排序](http://javasourcecode.org/html/open-source/ant/ant-1.6.4/org/apache/tools/ant/DirectoryScanner.java.html#line.1299)它之前返回。 – Andrew 2012-03-15 18:26:09

+0

@Andrew,他們對包含文件的結果進行排序,而不是目錄掃描的結果。 – 2012-03-15 18:30:43

1

根據這一page

dirset添加一個目錄設置爲隱含的構建路徑。請注意,這些目錄將以不特定的順序添加到構建路徑中,所以如果順序很重要,則應該使用文件列表!

下面是關於如何使用FileList