2010-06-16 10 views
15

Alle meine Projekte und deren Versionen in einer Eigenschaften definiert sind Datei wie folgt aus:Wie kann ich Eigenschaften aus einer Datei iterieren?

ProjectNameA=0.0.1 
ProjectNameB=1.4.2 

ich alle über die Projekte zu durchlaufen möchten, und ihre Namen und Versionen in einem Ant-Skript verwenden.

Derzeit lese ich die gesamte Datei die Eigenschaft Aufgabe verwenden, dann in eine eine gegebene Liste iterieren for-Schleife wie folgt aus:

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

Wie kann ich die harte Codierung der Projektnamen in der Vermeidung von für die Schleife? Im Grunde iterieren Sie über jede Zeile und extrahieren Sie den Namen und die Version eines Projekts, wie ich gehe.

Antwort

12

Sehen wie Sie bereits antcontrib mit for, wie etwa der Verwendung der propertyselector Aufgabe machen:

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

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

Die Idee dabei ist, die Eigenschaften einmal mit dem projects Präfix zu lesen, und verwenden Sie die resultierende Menge von Eigenschaften zum Erstellen einer kommagetrennten Liste von Projekten mit der Aufgabe propertyselector. Dann werden die Eigenschaften ohne das Präfix erneut gelesen, damit Ihre for-Schleife wie bisher fortfahren kann.

+0

Hinzugefügt Beziehung zu einem bestimmten Fehler, und die sequentielle alement zu dem for-Element, um es offensichtlicher zu machen. –

+0

Wollte eine Bearbeitung hinzufügen, aber sie wurde abgelehnt. Also füge ich es als Kommentar hinzu: Die for-Task ist nicht in der antcontrib.properties im letzten jar aufgelistet. Eine Problemumgehung ist, es als eine Klasse mit einem Namen in einem Taskdef aufzunehmen, so wie es in dem Fehlerbericht unter http://sourceforge.net/tracker/?func=detail&aid=2838574&group_id=36177&atid=416920 –

+0

Danke für den Beitrag Martin steht . Für andere, die keine Einstellungen für ant contrib haben, benötigen Sie möglicherweise auch folgende Zeile: Referenz: http: // ant-contrib. sourceforge.net/tasks/index.html#intro –

0

Etwas, das Sie im Auge behalten sollten, wenn Sie zusätzliche .property-Dateien lesen (außer build.properties). Wenn Sie eine zusätzliche Datei (über die Eigenschaftendatei = "foo.property") lesen, zeigt ant an, dass die Datei gelesen und die Eigenschaften geladen wurden. Wenn Sie jedoch auf sie verweisen, erscheinen sie undefiniert.

Verwandte Themen