Ich möchte die Anweisungen if
und unless
im ANT-Skript verdeutlichen
Ich habe den folgenden Code:
%Vor% Bedeutet das, dass das obige <exec>
ssremove.exe ausführt, wenn Product_version
nicht die Zeichenfolge "Extensions"
?
Wie wäre es dann mit dem umgekehrten Fall: Wenn es den String "Extensions"
enthält? Sieht mein Code so aus:
Sie haben die richtige Logik, aber ich bin mir nicht sicher, ob die Aufgabe <exec>
die Attribute if
und unless
akzeptiert. Weitere Informationen finden Sie in den Dokumenten .
Wahrscheinlich müssen Sie die <exec>
Tasks in ein Ziel umbrechen, das die Bedingung überprüft. Zum Beispiel:
Dann, wenn Sie ant ssremove
ausführen, denke ich, dass Sie bekommen, was Sie wollen.
"exec" unterstützt weder if, noch unless, also ist ChrisHs Antwort richtig. Normalerweise würden Sie die Bedingung auch in ein Ziel einbinden und daraus eine Abhängigkeit des anderen Ziels machen:
%Vor%Beachten Sie das Idiom, ein Ziel mit einem Bindestrich (-should-sremove) zu starten, um die Verwendung über die Befehlszeile zu verhindern. (Sie können 'ant-should-sremove' nicht tun, weil ant es als Argument anstatt als Ziel behandelt - das ist im ant-Handbuch dokumentiert)
Eine andere schlaue Redewendung, die in diesem Fall, auch aus dem Handbuch, verwendet wird, ist die alte "ist definiert" Bedeutung von falls / nicht und die neue (seit Ant 1.8) Erweiterung und Vergleich mit richtig / falsch / p>
Dies würde Ihnen geben:
%Vor%Beachten Sie die Unterscheidung: Das erste Ziel verwendet eine einfache alte, es sei denn, das zweite Ziel erweitert die Variable hasExtensions (mit den $ {}, die nicht im ersten Ziel verwendet werden) und läuft nur wenn es expandiert zu true (was der Standardwert ist, den 'available' darauf setzt, aber Sie können festlegen, indem Sie 'available' ein Attribut 'value' hinzufügen)
Der Vorteil dieses Idioms ist, dass Sie die Eigenschaft hasExtensions extern in einer Datei, die diese Datei importiert (z. B. build.xml), oder in der Befehlszeile eingeben können:
%Vor%Dies funktioniert, weil das -should-ssremove-Ziel nicht ausgeführt wird, wenn hasExtensions bereits definiert ist (was vor 1.8 die einzige von if / unless unterstützte Logik ist). Daher trumpft deine externe Definition auf. Das ssremove-Ziel wird dagegen nur ausgeführt, wenn die Eigenschaft hasExtensions zu false ausgewertet wird. Und es wird immer durch die Überprüfung definiert sein - dank der Abhängigkeit von -sould-sremove.
Es gibt auch die Aufgabe if in ant contrib. Ich persönlich denke, dass es einfacher ist, ein ant-Skript zu lesen, das die Aufgabe if verwendet, als diejenigen, die konditionale Ziele verwenden. Die if -Task ist in der ant-Community allerdings verpönt und Sie möchten wahrscheinlich mit ChrisHs Lösung gehen, wenn Sie nicht viel Konditional-Kram machen wollen.