2010-06-16 7 views
15

Tous mes projets et leurs versions sont définies dans un fichier de propriétés comme ceci:Comment puis-je itérer sur les propriétés d'un fichier?

ProjectNameA=0.0.1 
ProjectNameB=1.4.2 

Je voudrais itérer sur tous les projets, et d'utiliser leurs noms et versions dans un script Ant.

À l'heure actuelle, j'ai lu le fichier entier à l'aide de la tâche de la propriété, puis itérer sur une liste donnée dans une boucle comme ceci:

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

Comment puis-je éviter le codage en dur des noms de projet dans le pour la boucle? Fondamentalement parcourir sur chaque ligne et extraire le nom et la version d'un projet que je vais.

Répondre

12

Voyant que vous utilisez déjà antcontrib for, que diriez-vous faire usage de la propertyselector tâche:

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

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

L'idée est ici pour lire les propriétés une fois avec le préfixe projects, et utilisez le résultat de propriétés pour générer une liste de projets séparés par des virgules avec la tâche propertyselector. Ensuite, les propriétés sont relues sans le préfixe, de sorte que votre boucle for puisse continuer comme avant.

+0

Ajout d'une relation à un bogue donné, et alement séquentiel à l'élément for pour le rendre plus évident. –

+0

Je voulais ajouter une modification, mais elle a été rejetée. Je l'ajoute donc comme commentaire: la tâche for n'est pas listée dans le fichier antcontrib.properties du dernier jar. Une solution de contournement consiste à l'inclure comme une classe avec un nom dans un taskdef comme il est indiqué dans le rapport de bug à http://sourceforge.net/tracker/?func=detail&aid=2838574&group_id=36177&atid=416920 –

+0

Merci pour le poste Martin . Pour les autres utilisateurs qui n'ont pas configuré les choses pour ant contrib, vous pouvez également avoir besoin de la ligne suivante: Référence: http: // ant-contrib. sourceforge.net/tasks/index.html#intro –

0

Quelque chose que vous voulez garder à l'esprit, si vous lisez des fichiers .property supplémentaires (en dehors de build.properties) est portée. Si vous lisez un fichier supplémentaire (via le fichier de propriétés = "foo.property"), ant montrera que le fichier a été lu et les propriétés chargées. Cependant, quand vous les référencez, ils apparaissent non définis.

Questions connexes