我有兩個關於Apache Ant中的dirset type的問題。Ant:兩個有關dirset的問題
- 確實是一個dirset集合,沒有順序保證,還是保留輸入順序? 我想使用ant:contrib遍歷一組目錄和順序問題,所以如果Ant的dirset不保留插入順序,我有什麼替代方法?
- 如何測試某個目錄是否包含在dirset中?
我有兩個關於Apache Ant中的dirset type的問題。Ant:兩個有關dirset的問題
[編輯]
如果你看一下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。
有關dirset的Ant文檔沒有太多內容。
如果您使用patternset
,則不能保證訂單。
如果您使用include
,列出單個目錄而不是模式,dirset
應保留順序。可以肯定的是,我會測試這個。
編輯補充:如果我錯了,您可以編寫自己的Ant custom task以保留包含目錄的順序。
不,它不保存順序。
dirset的內容基於parent class通過DirectoryScanner
公開的內容。該掃描程序遍歷文件系統,並且不以任何特定順序執行。
它還使用File.list
這是爲了非確定性的來源:
沒有保證所得到的數組中的名稱字符串會出現在任何特定的順序;他們並不特別保證按字母順序出現。
他們[排序](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
@Andrew,他們對包含文件的結果進行排序,而不是目錄掃描的結果。 – 2012-03-15 18:30:43
鏈接我太早說話。正如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
@Mike Samuel:數組排序是處理包含模式的方法。我不得不花費更多的時間研究dirset源代碼。測試我所說的話會更快。 – 2012-03-15 18:33:27
沒有通過目錄掃描程序和沒有這樣的測試的包含文件的代碼路徑,你的答案似乎內容免費。 – 2012-03-15 19:27:00