Ant: Wie führe ich einen Befehl für jede Datei im Verzeichnis aus?
Möchte ich einen Befehl auszuführen, von einem Ant-buildfile, für jede Datei in einem Verzeichnis.
Ich bin auf der Suche nach einer Plattform-unabhängigen Lösung.
Wie mache ich das?
Sicher, ich könnte ein Skript schreiben, in einigen scripting-Sprache,
dies würde aber weitere Abhängigkeiten für das Projekt.
InformationsquelleAutor der Frage ivan_ivanovich_ivanoff | 2009-09-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kurze Antwort
Verwenden
<foreach>
mit einer verschachtelten<FileSet>
Foreach erfordert ant-contrib.
Aktualisiertes Beispiel für die jüngsten ant-contrib:
Diese wird antcall target "bar" mit dem ${theFile} was in der aktuellen Datei.
InformationsquelleAutor der Antwort blak3r
Verwenden Sie die <bewerben> task.
Es führt einen Befehl für jede Datei. Geben Sie die Dateien mit Hilfe von Dateigruppen oder eine andere Ressource. <bewerben> ist integriert; keine zusätzliche Abhängigkeit benötigt; keine benutzerdefinierten task-Implementierung benötigt.
Es ist auch möglich, den Befehl nur einmal, das anfügen aller Dateien, die als Argumente in einem Rutsch. Verwenden Sie das parallel-Attribut zu wechseln, das Verhalten.
Sorry für zu spät im Jahr.
InformationsquelleAutor der Antwort Alex
Einen Ansatz ohne ant-contrib angeregt durch die Tassilo Horn (die ursprünglichen Ziel ist hier)
Im Grunde, da es keine Erweiterung der <java - > (noch?) in der gleichen Weise
dass <bewerben> erstreckt <exec>, er empfiehlt <bewerben> (das kann natürlich auch ein java-programm in einer Kommandozeile)
Hier einige Beispiele:
InformationsquelleAutor der Antwort Jmini
Hier Weg dies zu tun ist mithilfe von javascript und die Ameise scriptdef Aufgabe, die Sie nicht brauchen, ant-contrib damit dieser code funktioniert, da scriptdef ist ein core-ant-task.
InformationsquelleAutor der Antwort ams
ant-contrib böse ist, schreiben Sie eine benutzerdefinierte ant-task.
ant-contrib ist böse, denn es versucht zu konvertieren Ameise aus einem deklarativen Stil einer imperativen Stil. Aber xml macht ein Mist Programmiersprache.
Hingegen ein custom-ant-Aufgabe können Sie das schreiben in einer echten Sprache (Java), mit einer echten IDE, wo Sie schreiben unit tests, um sicherzustellen, dass Sie das Verhalten, das Sie wollen, und dann machen eine saubere Erklärung in Ihrem build-Skript über das Verhalten, das Sie möchten.
Dieser rant ist nur von Bedeutung, wenn Sie sich sorgen über das schreiben wartbar ant-Skripten. Wenn Sie kümmern sich nicht um die Wartbarkeit der mit allen Mitteln alles tun, was funktioniert. 🙂
Jtf
InformationsquelleAutor der Antwort Jeffrey Fredrick
Ich weiß, dieser Beitrag ist wirklich alt, aber jetzt, einige Zeit und ant-Versionen weitergegeben, es ist ein Weg, dies zu tun mit grundlegenden ant und ich dachte, ich sollte es teilen.
Es ist über eine rekursive macrodef, ruft verschachtelte Aufgaben (auch andere Makros aufgerufen werden können). Die einzige Konvention ist eine Feste variable-name (element).
Die wichtigsten Funktionen, die benötigt werden, wo:
Ich nicht zu verwalten, um die Trennzeichen variabel, aber dies kann nicht ein großer Nachteil sein.
InformationsquelleAutor der Antwort dag
Können Sie die ant-contrib tasks "für" Iteration über die Liste von Dateien zu trennen, indem Sie alle delimeter, Standard-delimeter ist ",".
Folgenden wird die Beispiel-Datei, die zeigt:
InformationsquelleAutor der Antwort Hemant
Tun, was blak3r vorgeschlagen und definieren Sie Ihre Ziele classpath wie so
wo die lib ist, wo Sie speichern Ihre jar -
InformationsquelleAutor der Antwort bungee