2009-04-08 8 views
6

Vorrei creare una macro in quanto tale:Elemento predefinito per macrodef di Ant?

<macrodef name="testing"> 
    <element name="test" implicit="yes"/> 
    <sequential> 
    <test/> 
    </sequential> 
</macrodef> 

E poi usarlo:

<testing> 
    <echo message="hello world"/> 
</testing> 

Tuttavia, vorrei specificare un valore predefinito per l'elemento implicito ... qualcosa di simile:

<macrodef name="testing"> 
    <element name="test" implicit="yes"> 
    <echo message="hello world"/> 
    </element> 
    <sequential> 
    <test/> 
    </sequential> 
</macrodef> 

Così posso quindi utilizzarlo come tale:

<testing/> 

Tranne dove voglio cambiare l'elemento di default.

Ciò è possibile senza definire un'attività tramite una classe Java? Finora, non vedo alcuna documentazione che indichi come farlo, se è così.


Aggiornamento

Ho finito per risolvere il mio problema particolare utilizzando refid per insiemi di file (che è quello che in realtà stavo cercando di tirare in un elemento). Usando il refid, era semplice usare solo un attributo macrodef, che può avere un valore predefinito.

Un'altra alternativa sarebbe creare una nuova macro di base che utilizza l'elemento e quindi avrei potuto mantenere la macro esistente come quella in uso ... ma ancora, non esiste un meccanismo predefinito reale per un elemento (che sarebbe sii carino).

Quindi, Simon ottiene la risposta poiché è corretto! Grazie!

risposta

6

Questo non è possibile sulla base degli nidificato documentazione element elemento per il macrodef task.

C'è a Bugzilla issue open esattamente per la funzionalità che si descrive, purtroppo è stato aperto dal 2004.

3

se si definisce il vostro macrodef come:

<macrodef name="testing"> 
    <element name="additional" optional="true"/> 
    <sequential> 
     <echo message="hello"/> 
     <additional/> 
    </sequential> 
</macrodef> 

la seguente invocazione:

<target name="testing-call"> 
    <mylib:testing/> 
    <mylib:testing> 
     <additional> 
      <echo message="world!"/> 
     </additional> 
    </mylib:testing> 
</target> 

uscita volontà:

[echo] hello 
[echo] hello 
[echo] world! 
+1

Apprezzato, ma io sono alla ricerca di un vero e proprio difetto, il comportamento non facoltativo ... Vorrei il contenuto del default essere completamente sostituiti con ciò che è effettivamente passato, ma ovviamente solo se è stato definito un contenuto. –

Problemi correlati