Führen Sie Ant-Task nur aus, wenn eine Bedingung erfüllt ist
Brauche ich zum ausführen eines Ant task innerhalb eines bestimmten Ziel-nur, wenn eine Bedingung erfüllt ist.
Ich einen Weg gefunden, um die Bedingung zu bestimmen, an die Ziel-Ebene, nicht aber auf die task-Ebene. Ich habe auch einen Beitrag, die eine WENN Aufgabe.
Meine Frage ist, sind Sie sich bewusst jeder Weg, um dieses Ziel zu erreichen, die mit standard-Ant-tasks?
Längere Erklärung: ich bin versucht zu starten, Tomcat-Server, wenn er beendet wird. Zu erkennen, ob es aufgehört, ich benutze folgenden code:
<echo message="Checking whether Tomcat is running"/>
<condition property="tomcat.running">
<socket server="${tomcat.host}" port="${tomcat.port}"/>
</condition>
Also meine nächste Aufgabe in diesem Ziel, ist eine exec-task, die nur ausgeführt werden soll, wenn ${tomcat.running}
ist falsch. Und als ich sagte, ich don ' T wollen, fügen Sie eine einzelne Aufgabe in ein target zu verwenden, es sei denn, die Eigenschaft.
InformationsquelleAutor der Frage Jose Miguel Ordax | 2013-01-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ant-target kann optional
if
oderunless
- Klausel. Dies bedeutet, dass zur Durchführung der Aufgabe nur, wenn die Eigenschaft festgelegt ist, mit einerif
- Klausel, oder ist unset mit derunless
- Klausel1. Interessant ist, dassif
oderunless
- Klausel wird geprüft, nach abhängige Aufgabe zuerst ausgeführt wird.Dies bedeutet, Sie können dies tun, in der standard-Ant-als eine Möglichkeit der Ausführung eines Ant-task nur dann, wenn eine bestimmte Bedingung erfüllt ist:
Geben Sie, Sie möchten, dass Ant ausführen Ziel
my.target
. Ant bemerkt, dassmy.target
hängt von dertest.if.tomcat.is.running
Ziel, und es wird ausgeführt, dass zuerst. Dietest.if.tomcat.is.running
Aufgabe wird dietomcat.running
Eigenschaft, wenn Tomcat ausgeführt. Ansonsten, ist diese Eigenschaft nicht gesetzt.Schließlich, Ant, gehen zurück auf die
my.target
Ziel und sehen, ob die Eigenschafttomcat.running
festgelegt ist, und führt nur dann das Zielmy.target
wenn es gesetzt ist.Oder Sie können die Ant-contrib tasks, die können Sie Ihre gesamte build-Prozess einfacher zu verstehen.
Wenn Sie gehen wollen, dass die Ant-Contrib route, es gibt einen einfachen Weg, um das setup Ant-Contrib, so die Ant-contrib-Glas ist tatsächlich Teil des Projekts. Wenn jemand checkt Ihr Projekt von version-control-system, Sie erhalten auch die Ant-contrib-Glas, und somit nicht zu installieren, Ant-Contrib selbst.
Laden Sie die Ant-Contrib jar, und legen Sie Sie in ein Verzeichnis in der Wurzel Ihrer Projekt namens
antlib/ac
. Dieantlib
verwendet werden können für alle Arten von optionalen Aufgabe Gläsern wie Findbugs oder PMD. Setzen Sie einfach jedes optionale Ant jar in Ihr eigenes Verzeichnis unterantlib
(Wie lege ich Ant-Contrib unter derac
Verzeichnis).Dann in Ihrer
build.xml
geben Sie die Ant-Contrib tasks auf diese Weise:Nun können Sie die Ant-Contrib tasks, ohne sich Gedanken, ob oder nicht Sie sind auf einem bestimmten Computer installiert ist oder nicht. Kasse Sie Ihr Projekt, und Sie haben Zugriff auf diese Aufgaben automatisch.
1. Das ist richtig, das
if/unless
- Klausel prüft, ob eine Eigenschaft gesetzt ist und nichttrue
/false
was kann die Ursache für sehr viel Verwirrung. Ich habe schon Entwickler gesehen, die eine Immobilie zufalse
oderno
und Wundern sich dann, warum das Ziel ist, tatsächlich auszuführen, da derif
Klausel ist false.InformationsquelleAutor der Antwort David W.
Seit version 1.9.1(*) ant unterstützt haben wenn - und falls-Bedingungen in einer mehr feinkörnigen Weg auf jede Aufgabewenn Sie erklären, die notwendigen namespaces innerhalb des Projekt-Elements.
(*) Bitte verwenden Sie die neueste version von ant (1.9.6 als dies geschrieben wurde), als version 1.9.1 enthält Fehler WRT dieses neue feature, wie user @Rebse freundlich darauf hingewiesen.
In dem Beispiel unten können Sie spielen, um zu kommentieren/uncommenting die Eigenschaften...
... und beobachten Sie die Ergebnisse, wie etwa diese:
InformationsquelleAutor der Antwort Jörg
Wenn Sie möchten, eine "if-else" Art der Umsetzung:
InformationsquelleAutor der Antwort Agilan Palani
Gibt es Situationen, wenn Sie nicht in der Lage, um Ihren Ant-target von einem anderen abhängig Ant-target, weil die wenn sollte evaluiert werden, basierend auf einem Wert initialisiert, kurz bevor exec (ich kann ein klares Beispiel, aber der Einfachheit halber werde ich nicht).
Auf Unix-ähnlichen Systemen eine alternative (bevorzugt in bestimmten Situationen), ist die folgende:
In der über die mein bash-Befehl zeigt der Befehl/Programm, das Sie ausführen wollen und die Argumente ilustrates die Argumente für diesen Befehl.
Beachten Sie, dass, wenn die myprop nicht gesetzt ist, dann werden die ${myprop} wird einfach ausgewertet, um die Zeichenfolge "$" + "{" + "myprop" + "}" (dh. "${myprop}"), damit wir vergleichen den Wert von myprop vor, dass string.
Auf der anderen Seite, wenn myprop gesetzt ist, dann wird sein Wert ist wahrscheinlich die Zeichenfolge true/false so, um zu prüfen, WENN unsere Bedingung erfüllt ist, sollten wir vergleichen die myprop gegen die saite wahr (oder was auch immer Wert Sie haben kann).
Abschluss: mit dem Ant - exec in Kombination mit der OS-command WENN wir können die Ausführung von beliebigem OS-Befehle/- Programme, ohne die Notwendigkeit von anderen Ant-target. Mit der gleichen Logik wie oben die WENN-like-Anweisung kann gezwickt werden, um zu arbeiten, sogar unter Windows.
InformationsquelleAutor der Antwort Eugen Mihailescu