2009-04-08 8 views
6

Me gustaría crear una macro como tal:Elemento predeterminado para el macrodef de Ant?

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

y luego usarlo:

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

Sin embargo, me gustaría especificar un valor predeterminado para el elemento implícito ... algo así como:

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

Así que después puede utilizar como tal:

<testing/> 

Excepto donde quiero cambiar el elemento predeterminado.

¿Esto es posible sin definir una tarea a través de una clase de Java? Hasta ahora, no veo ninguna documentación que indique cómo hacerlo, si es así.


actualización

terminé resolver mi situación particular, mediante el uso de refid para conjuntos de archivos (que es lo que en realidad estaba tratando de tirar en un elemento). Usando el refid, era simple usar un atributo de macrodef, que CAN puede tener un valor predeterminado.

Otra alternativa sería crear una nueva macro base que use el elemento, y entonces podría haber mantenido mi macro existente como usando esa ... pero aun así, no hay un mecanismo predeterminado real para un elemento (que se bueno).

Entonces, ¡Simon recibe la respuesta porque es el correcto! ¡Gracias!

Respuesta

6

Esto no es posible en base a la documentación element elemento anidado para el macrodef task.

Hay a Bugzilla issue open por exactamente la funcionalidad que usted describe, por desgracia, ha estado abierto desde 2004.

3

si define su macrodef como:

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

la siguiente invocación:

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

la Salida:

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

apreciado, pero estoy buscando una manera predeterminada real, el comportamiento no es opcional ... Me gustaría que el contenido del defecto para ser reemplazado por completo con lo que realmente se transfiere, pero por supuesto solo si hay contenido definido. –

Cuestiones relacionadas