Ich möchte für jede Datei in einem Verzeichnis einen Befehl aus einer Ant-Builddatei ausführen.
Ich suche eine plattformunabhängige Lösung.
Wie mache ich das?
Sicher, ich könnte ein Skript in einer Skriptsprache schreiben, aber dies würde dem Projekt weitere Abhängigkeiten hinzufügen.
file-io
ant
build-process
build-automation
ivan_ivanovich_ivanoff
quelle
quelle
Verwenden Sie die Aufgabe <apply> .
Es führt einmal für jede Datei einen Befehl aus. Geben Sie die Dateien mithilfe von Dateigruppen oder anderen Ressourcen an. <apply> ist eingebaut; keine zusätzliche Abhängigkeit erforderlich; Keine Implementierung einer benutzerdefinierten Aufgabe erforderlich.
Es ist auch möglich, den Befehl nur einmal auszuführen und alle Dateien auf einmal als Argumente anzuhängen. Verwenden Sie das Attribut parallel, um das Verhalten zu ändern.
Tut mir leid, dass ich zu spät im Jahr bin.
quelle
Ein Ansatz ohne Ant-Contrib wird von Tassilo Horn vorgeschlagen (das ursprüngliche Ziel ist hier ).
Grundsätzlich, da es keine Erweiterung von <java> (noch?) In der gleichen Art und Weise , dass <anwenden> erweitert <exec> , er Gebrauch schlägt <anwenden> (die natürlich auch ein Java - Programm in einer Befehlszeile ausführen)
Hier einige Beispiele:
quelle
Hier ist eine Möglichkeit, dies mit Javascript und der Ant-Scriptdef-Task zu tun. Sie benötigen Ant-Contrib, damit dieser Code funktioniert, da Scriptdef eine zentrale Ant-Task ist.
quelle
project
obigen Beispiel wird auf eine Variable verwiesen, jedoch ohne vorherige Definition. Wäre gut, wenn das dargestellt oder geklärt würde. BEARBEITEN: n / m, festgestellt, dass diesproject
eine vordefinierte Variable für den Zugriff auf das aktuelle Projekt ist. Ich hatte das vermutet, war mir aber nicht sicher.Ameisenbeitrag ist böse; schreibe eine benutzerdefinierte Ameisenaufgabe.
Ant-Contrib ist böse, weil es versucht, Ant von einem deklarativen Stil in einen imperativen Stil umzuwandeln. Aber XML macht eine beschissene Programmiersprache.
Im Gegensatz dazu können Sie mit einer benutzerdefinierten Ameisenaufgabe in einer echten Sprache (Java) mit einer echten IDE schreiben, in der Sie Komponententests schreiben können, um sicherzustellen, dass Sie das gewünschte Verhalten haben, und dann in Ihrem Build-Skript eine saubere Deklaration über erstellen das Verhalten, das Sie wollen.
Diese Beschimpfung ist nur wichtig, wenn Sie wartbare Ameisenskripte schreiben möchten. Wenn Sie sich nicht unbedingt um die Wartbarkeit kümmern, tun Sie alles, was funktioniert. :) :)
Jtf
quelle
Ich weiß, dass dieser Beitrag wirklich alt ist, aber jetzt, da einige Zeit- und Ameisenversionen vergangen sind, gibt es eine Möglichkeit, dies mit grundlegenden Ameisenfunktionen zu tun, und ich dachte, ich sollte ihn teilen.
Dies erfolgt über ein rekursives Makrodef, das verschachtelte Aufgaben aufruft (auch andere Makros können aufgerufen werden). Die einzige Konvention besteht darin, einen festen Variablennamen (Element hier) zu verwenden.
Die wichtigsten Funktionen, die benötigt werden, wo:
Ich habe es nicht geschafft, das Trennzeichen variabel zu machen, aber dies ist möglicherweise kein großer Nachteil.
quelle
Sie können die Ant-Contrib-Aufgabe "für" verwenden, um die Liste der Dateien zu durchlaufen, die durch ein beliebiges Delimeter getrennt sind. Das Standard-Delimeter ist ",".
Das Folgende ist die Beispieldatei, die dies zeigt:
quelle
Tun Sie, was blak3r vorgeschlagen hat, und definieren Sie den Klassenpfad Ihres Ziels so
wo lib ist, wo Sie Ihre Gläser aufbewahren
quelle