2010-06-16 29 views
15

Todos mis proyectos y sus versiones se definen en un archivo de propiedades de esta manera:¿Cómo puedo iterar sobre las propiedades de un archivo?

ProjectNameA=0.0.1 
ProjectNameB=1.4.2 

me gustaría iterar sobre todos los proyectos, y el uso de sus nombres y versiones de un script Ant.

En la actualidad me leer todo el archivo utilizando la tarea de la propiedad, a continuación, iterar sobre una lista dada en un bucle como este:

<for list="ProjectNameA,ProjectNameB" param="project"> 
    <sequential> 
    <echo message="@{project} has version ${@{project}}" /> 
    </sequential> 
</for> 

¿Cómo puedo evitar el disco-codificación de los nombres de los proyectos en el ¿en bucle? Básicamente iterar sobre cada línea y extraer el nombre y la versión de un proyecto sobre la marcha.

Respuesta

12

En vista de que ya está usando antcontrib for, la forma de hacer uso de la propertyselector tarea:

<property file="properties.txt" prefix="projects."/> 
<propertyselector property="projects" match="projects\.(.*)" select="\1"/> 

<property file="properties.txt" /> 
<for list="${projects}" param="project"> 
    ... 
</for> 

La idea aquí es leer las propiedades de una vez con el prefijo projects, y utilizar el conjunto resultante de propiedades para crear una lista de proyectos separados por comas con la tarea propertyselector. A continuación, las propiedades se vuelven a leer sin el prefijo, por lo que su bucle for puede continuar como antes.

+0

Se agregó una relación a un error determinado y el elemento secuencial al elemento para hacerlo más obvio. –

+0

Quería agregar una edición, pero fue rechazada. Así que lo agrego como comentario: la tarea para no está en la lista de alguna manera en el archivo antcontrib.properties en el último archivo jar. Una solución es incluirlo como una clase con un nombre en una tarea como se indica en el informe de errores en http://sourceforge.net/tracker/?func=detail&aid=2838574&group_id=36177&atid=416920 –

+0

Gracias por el mensaje Martin . Para otras personas que no tuvieron configuraciones para Ant Contrib, es posible que también necesites la siguiente línea: Referencia: http: // ant-contrib. sourceforge.net/tasks/index.html#intro –

0

Algo que desea tener en cuenta, si está leyendo archivos .property adicionales (además de build.properties) es el alcance. Si lee un archivo adicional (a través del archivo de propiedad = "foo.property"), la hormiga mostrará que el archivo fue leído y las propiedades cargadas. Sin embargo, cuando los referencia a ellos, aparecen sin definir.

Cuestiones relacionadas