Von ant manual:
Da Ant 1.9.1 ist es möglich, wenn und wenn Attribute auf allen Aufgaben und verschachtelte Elemente mit speziellen Namensraum hinzuzufügen.
Haben Sie nicht den neuen verwenden, wenn und es sei denn, Attribute in einem macrodef bis jetzt, aber die folgenden Ausschnitt funktioniert:
<project xmlns:if="ant:if" xmlns:unless="ant:unless">
<property name="foo" value="true"/>
<macrodef name="foobar">
<attribute name="bla"/>
<attribute name="whentrue"/>
<sequential>
<echo if:true="${@{whentrue}}">@{bla}</echo>
</sequential>
</macrodef>
<echo>${ant.version}</echo>
<foobar whentrue="foo" bla="yada,yada"/>
</project>
Hinweis => die Eigenschaft Syntax <echo if:true="${@{whentrue}}">
, es funktioniert nicht bei Verwendung von Nur @ {wowtrue}.
Ausgang:
[echo] Apache Ant(TM) version 1.9.1 compiled on May 15 2013
[echo] yada,yada
Mein anderer Versuch:
<macrodef name="foobar" if:true="foo">
<attribute name="bla"/>
<sequential>
<echo>@{bla}</echo>
</sequential>
</macrodef>
<echo>${ant.version}</echo>
<foobar bla="yada,yada"/>
hat nicht funktioniert:
... Problem: failed to create task or type foobar
Cause: The name is undefined.
Action: Check the spelling.
Action: Check that any custom tasks/types have been declared.
Action: Check that any <presetdef>/<macrodef> declarations have taken place.
auch angenommen, dass so etwas wie <foobar bla="yada,yada" if:true="foo"/>
funktionieren würde:
<project xmlns:if="ant:if" xmlns:unless="ant:unless">
<property name="foo" value="true"/>
<macrodef name="foobar">
<attribute name="bla"/>
<sequential>
<echo>@{bla}</echo>
</sequential>
</macrodef>
<echo>${ant.version}</echo>
<foobar bla="yada,yada" if:true="foo"/>
</project>
Ausgang, kein Fehler, aber macrodef nicht ausgeführt bekommt:
[echo] Apache Ant(TM) version 1.9.1 compiled on May 15 2013
BUILD SUCCESSFUL
Scheint, wie es noch einige Unstimmigkeiten in diesem Bereich sind, da diese Funktion ist neu versohlt.
Vielleicht sollten wir einen Fehler einreichen!?
- BEARBEITEN (1) -
Nur gefunden comment from 2007 by Peter Reilly (er hat das if/if-Feature implementiert) in der Ameisen-Bug-Datenbank, die ein Snippet mit einem Makrodef liefert.
- EDIT (2) -
Obwohl die neue Ant-Release 1.9.3 vom 29. Dezember 2013 (see releasenotes here) einen Fehler auf die neuen, wenn im Zusammenhang festgelegt: und es sei denn, Attribute (https://issues.apache.org/bugzilla/show_bug.cgi?id=55885) unser Problem bleibt . So habe ich einen Fehlerbericht geöffnet, siehe Ameisen-Bug-Datenbank bugid 55971.
- EDIT (3) -
Schließlich wird die Lösung gefunden wird. Neben dem Bugfix für Bugid 55885 der Ant Release 1.9.3 enthält auch einen Bugfix für die Dokumentation des neuen if: und sofern: Attribute =>Bugid 55359 zeigt, dass if:true="${propertyname}"
anstelle von if:true="propertyname"
verwendet werden muss.
So sollte Ihr Makro auf Ant 1.9.3 wie das nach dem Upgrade arbeiten:
<property name="test.templates" value="true"/>
....
<target name="test.templates"
description="Test the autoconfiguration templates and answers">
<test.templates
if:true="${test.templates}"
template.root.dir="${main.dir}"
answers.dir="${main.config.dir}"/>
</target>
ich bemerkt, dass Sie haben ein Ziel, das Eigentum und Makro alle genannten „test.templates“ –
einen Fehlerbericht Gefüllt nach wie vor Problem bleibt mit neuer Ameise vom 29. Dezember 2013 - siehe meine aktualisierte Antwort EDIT (2) für Details. – Rebse
Lösung gefunden - siehe meine aktualisierte Antwort EDIT (3)! – Rebse