2012-03-15 13 views
6

Mam dwa pytania dotyczące dirset type w Apache Ant.Ant: Dwa pytania dotyczące dirsets

  • Czy dirset to naprawdę zestaw, bez gwarantowanej kolejności lub czy zachowuje kolejność wprowadzania? Chcę użyć ant: contrib do iterowania w zestawie katalogów i porządkowania spraw, więc jeśli direktor Anta nie zachowuje kolejności wstawiania, jakie mam alternatywy?
  • Jak mogę sprawdzić, czy dany katalog jest zawarty w dirsecie?

Odpowiedz

3

[Edytuj]

Jeśli spojrzeć na dirset source Wygląda na to, że używa java File.list(), którego documentation stwierdza, że ​​nie ma porządek gauranteed. Więc nie możesz na to absolutnie liczyć. jednak przed powrotem wywołuje Arrays.sort(files); patrz linia 1572


Jak na rozkaz nie mogę powiedzieć, bym zaryzykować, że nie ma gwarancji, ale to, że zwykle po prostu zdarza się, aby zachować porządek systemów plików zachowaniu .

Co do testów, jak sądzę chcesz, czy działania, jeśli plik istnieje, lub coś podobnego, używając ant contrib

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

Jeśli nie ma nic w dirset jeśli nic nie zrobi.

1

W dokumentacji Anta nie ma zbyt wiele informacji o dirset.

Jeśli używasz patternset, nie ma gwarancji zamówienia.

Jeśli używasz include, wymieniając poszczególne katalogi zamiast wzorców, dirset powinien zachować kolejność. Z pewnością jednak to sprawdzę.

Edytowane w celu dodania: w przypadku, gdy się mylę, można napisać własną wartość Ant custom task, aby zachować kolejność katalogów uwzględniania.

+0

Rozmawiałem zbyt szybko. Jak wskazuje Andrew, wstawione pliki są [posortowane] (http://javasourcecode.org/html/open-source/ant/ant-1.6.4/org/apache/tools/ant/DirectoryScanner.java.html#line. 1299), więc zamówienie reklamowe nie zostanie zachowane. –

+0

@Mike Samuel: Sortowanie macierzy jest metodą, która zajmuje się wzorami uwzględniania. Musiałbym spędzić więcej czasu na studiowaniu kodu źródłowego dirsetu, żeby się upewnić. Szybciej przetestuję to, co powiedziałem. –

+0

Nie ma ścieżki kodowej dla dołączonych plików, która nie przechodzi przez skaner katalogu i bez takich testów, twoja odpowiedź wydaje się wolna od treści. –

0

Nie nie zachowuje porządku.

Zawartość dirsetu zależy od tego, co jego parent class ujawnia poprzez DirectoryScanner. Ten skaner porusza się w systemie plików i nie robi tego w żadnej określonej kolejności.

Wykorzystuje również File.list który jest źródłem braku determinizmu zamówienia:

Nie ma gwarancji, że struny nazwę w wynikowej tabeli pojawią się w konkretnej kolejności; w szczególności nie gwarantują, że pojawią się w kolejności alfabetycznej.

+0

Oni [sort] (http://javasourcecode.org/html/open-source/ant/ant-1.6.4/org/apache/tools/ant/DirectoryScanner.java.html#line.1299) przed powrotem . – Andrew

+0

@Andrew, sortują wyniki zawartych w nim plików, a nie wyniki skanowania katalogu. –

1

Według tego page

dirset Dodaje katalog ustawiony na niejawnej ścieżki kompilacji.Zauważ, że katalogi zostaną dodane do ścieżki budowania w określonej kolejności, więc jeśli zamówienie jest znaczące, należy zamiast tego użyć listy plików!

Oto Link na temat korzystania FileList

Powiązane problemy