2012-03-15 11 views
6

Tengo dos preguntas sobre el dirset type en Apache Ant.Ant: Dos preguntas sobre dirsets

  • ¿Es un dirset realmente un conjunto, sin orden garantizada, o conserva el orden de entrada? Quiero usar ant: contrib para iterar sobre un conjunto de directorios y cuestiones de orden, por lo que si el dirset de Ant no conserva el orden de inserción, ¿qué alternativas tengo?
  • ¿Cómo puedo comprobar si un determinado directorio está incluido dentro de un dirset?

Respuesta

3

[Editar]

Si nos fijamos en la dirset source Parece que utiliza Java File.list(), cuya documentation afirma que no hay un orden gauranteed. Así que no, no puedes contar con eso absolutamente. Sin embargo, antes de devolverlo llama Arrays.sort(files); véase la línea 1572.


De acuerdo con el fin que no podía decir, me aventuro que no hay ninguna garantía, pero que por lo general sólo pasa a preservar el orden sistemas de archivos preservando .

En cuanto a las pruebas, supongo que quieres, acción, si existe este archivo o algo similar, usando contrib hormiga,

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

Si no hay nada en el dirset si no va a hacer nada.

1

No hay mucho en la documentación de Ant sobre dirset.

Si usa patternset, no hay garantía de orden.

Si usa include, enumerando directorios individuales en lugar de patrones, dirset debe conservar el orden. Sin embargo, probaría esto, para estar seguro.

Editado para agregar: En caso de que me equivoque, puede escribir su propio Ant custom task para conservar el orden de los directorios de inclusión.

+0

he hablado demasiado pronto. Como señala Andrew, los archivos insertados se [ordenan] (http://javasourcecode.org/html/open-source/ant/ant-1.6.4/org/apache/tools/ant/DirectoryScanner.java.html#line. 1299) por lo que el orden de inserción no se conserva. –

+0

@Mike Samuel: el ordenamiento de matriz está en un método que trata con patrones de inclusión. Tendría que pasar mucho más tiempo estudiando el código fuente del dirset para estar seguro. Sería más rápido probar lo que dije. –

+0

no hay una ruta de código para los archivos incluidos que no pasa por el escáner de directorios y sin dichas pruebas, su respuesta parece libre de contenido. –

0

No, no conserva la orden.

Los contenidos de un dirset se basan en lo que expone parent class a través de DirectoryScanner. Ese escáner recorre el sistema de archivos y no lo hace en un orden particular.

También utiliza File.list que es una fuente de orden no determinismo:

No hay garantía de que las cadenas de nombre de la matriz resultante aparecerá en cualquier orden específico; no están garantizados, en particular, que aparezcan en orden alfabético.

+0

Ellos [ordenar] (http://javasourcecode.org/html/open-source/ant/ant-1.6.4/org/apache/tools/ant/DirectoryScanner.java.html#line.1299) antes de regresar . – Andrew

+0

@Andrew, clasifican el resultado de los archivos incluidos allí, no los resultados del escaneo de directorio. –

1

De acuerdo con esta page

dirset Añade un directorio establecido a la trayectoria de la estructura implícita.Tenga en cuenta que los directorios se agregarán a la ruta de compilación sin un orden en particular, por lo que si el orden es significativo, ¡uno debe usar una lista de archivos en su lugar!

Aquí hay enlace sobre cómo utilizar FileList