wenn und außer in ant

8

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" ?

enthält

Wie wäre es dann mit dem umgekehrten Fall: Wenn es den String "Extensions" enthält? Sieht mein Code so aus:

%Vor%     
jeremychan 13.04.2011, 03:01
quelle

5 Antworten

9

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:

%Vor%

Dann, wenn Sie ant ssremove ausführen, denke ich, dass Sie bekommen, was Sie wollen.

    
ChrisH 13.04.2011, 03:14
quelle
7

"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.

    
Rhubarb 06.06.2012 11:23
quelle
4

Seit Ant 1.9.1 können if und if Attribute auf allen Tasks und verschachtelten Elementen mit speziellen Namespaces hinzugefügt werden:

%Vor%

Siehe: Ссылка

%Vor%     
roman-mkh 06.05.2015 14:26
quelle
1

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.

    
Mikael Vandmo 13.04.2011 08:39
quelle
1
%Vor%     
sgrillon 22.01.2015 14:45
quelle

Tags und Links