Da ant manual:
Dal Ant 1.9.1 è possibile aggiungere se e meno che gli attributi su tutti compiti e gli elementi nidificati utilizzando namespace speciali.
non ha utilizzato il nuovo caso e se non gli attributi in una macrodef fino ad ora, ma il seguente frammento funziona:
<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>
Avviso => la sintassi di proprietà <echo if:true="${@{whentrue}}">
, non funziona quando si utilizza solo @ {whentrue}.
uscita:
[echo] Apache Ant(TM) version 1.9.1 compiled on May 15 2013
[echo] yada,yada
altra mia prova:
<macrodef name="foobar" if:true="foo">
<attribute name="bla"/>
<sequential>
<echo>@{bla}</echo>
</sequential>
</macrodef>
<echo>${ant.version}</echo>
<foobar bla="yada,yada"/>
non ha funzionato:
... 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.
presume anche che qualcosa di simile potrebbe funzionare <foobar bla="yada,yada" if:true="foo"/>
:
012.
<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>
uscita, nessun errore ma macrodef non viene eseguita:
[echo] Apache Ant(TM) version 1.9.1 compiled on May 15 2013
BUILD SUCCESSFUL
Sembra che ci sono ancora alcune incongruenze in quella zona, in quanto questa funzione è nuovo di zecca.
Forse dovremmo presentare un bug !?
- EDIT (1) -
Ha appena trovato un comment from 2007 by Peter Reilly (ha implementato la funzione if/unless) nel database dei bug form che fornisce uno snippet con macrodef.
- EDIT (2) -
Anche se il nuovo 1.9.3 rilascio Ant dal 29 dicembre, 2013 (see releasenotes here) fissato un bug relativo ai nuovi se: e meno che: attributi (https://issues.apache.org/bugzilla/show_bug.cgi?id=55885) il nostro problema rimane ancora . Così ho aperto una segnalazione di bug, vedi la banca dati dei bug delle formiche bugid 55971.
- EDIT (3) -
Infine, la soluzione è stata trovata. Accanto al bugfix per Bugid 55885 Ant Release 1.9.3 fornisce anche un bugfix per la documentazione del nuovo if: and unless: attributes =>Bugid 55359 che mostra che if:true="${propertyname}"
invece di if:true="propertyname"
deve essere usato.
Quindi la macro dovrebbe funzionare dopo l'aggiornamento a 1.9.3 Ant così:
<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>
ho notato che hai un obiettivo, proprietà e macro tutte le chiamate "test.templates" –
riempito un bug report dopo problema rimane con rilascio di nuove formiche dal 29 dicembre 2013 - vedi la mia risposta aggiornata EDIT (2) per i dettagli. – Rebse
Soluzione trovata - guarda la mia risposta aggiornata EDIT (3)! – Rebse