2012-03-15 13 views
6

Ho due domande su dirset type in Apache Ant.Ant: due domande su dirsets

  • È un dirset davvero un set, senza ordine garantito o mantiene l'ordine di input? Voglio usare ant: contrib a iterare su un insieme di directory e ordini di argomenti, quindi se il dirset di Ant non preserva l'ordine di inserimento, quali alternative ho?
  • Come posso verificare se una certa dir è inclusa in un dirset?

risposta

3

[Edit]

Se si guarda alla dirset source Sembra che utilizza Java File.list(), la cui documentation afferma che non esiste un ordine Gauranteed. Quindi non si può assolutamente contare su questo assolutamente. Tuttavia, prima di tornare chiama Arrays.sort(files); vedere la linea 1572.


Come da ordine non ho potuto dire, mi azzarderei che non v'è alcuna garanzia, ma che di solito succede solo a preservare l'ordine dei file system preservare .

Per quanto riguarda i test, presumo che si desidera, fare azione se questo file esiste o qualcosa di simile, utilizzando contrib formica,

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

Se non c'è niente nel dirset se non farà nulla.

1

Non c'è molto nella documentazione di Ant su dirset.

Se si utilizza patternset, non è possibile garantire l'ordine.

Se si utilizza include, elencando singole directory anziché modelli, dirset deve conservare l'ordine. Lo testerei però, per essere sicuro.

Modificato per aggiungere: Nel caso in cui io abbia torto, è possibile scrivere il proprio Ant custom task per mantenere l'ordine delle directory di inclusione.

+0

ho parlato troppo presto. Come sottolinea Andrew, i file inseriti sono [ordinati] (http://javasourcecode.org/html/open-source/ant/ant-1ant.4/org/apache/tools/ant/DirectoryScanner.java.html#line. 1299), quindi l'ordine di inserimento non viene mantenuto. –

+0

@ Mike Samuel: l'ordinamento dell'array è in un metodo che riguarda i pattern di inclusione. Dovrei passare più tempo a studiare il codice sorgente di dirset per essere sicuro. Sarebbe più veloce testare quello che ho detto. –

+0

non esiste un percorso di codice per i file inclusi che non passano attraverso lo scanner di directory e senza tali test, la risposta sembra libera dai contenuti. –

0

No, non conserva l'ordine.

I contenuti di un dirset sono basati su ciò che il suo parent class espone tramite un DirectoryScanner. Lo scanner percorre il file system e non lo fa in nessun ordine particolare.

Si utilizza anche File.list che è una fonte di ordine non determinismo:

v'è alcuna garanzia che le stringhe di nome della matrice risultante appariranno in qualsiasi ordine specifico; in particolare, non è garantito che compaiano in ordine alfabetico.

+0

Loro [ordinano] (http://javasourcecode.org/html/open-source/ant/ant-1ant.4.6/org/apache/tools/ant/DirectoryScanner.java.html#line.1299) prima di tornare comunque . – Andrew

+0

@Andrew, ordinano il risultato dei file inclusi, non i risultati della scansione della directory. –

1

Secondo questa page

dirset Aggiunge una directory impostata sul percorso di generazione implicita.Si noti che le directory verranno aggiunte al percorso di generazione in un ordine particolare, quindi se l'ordine è significativo, si dovrebbe usare invece una lista di file!

Qui di Link su come utilizzare FileList