2011-08-08 8 views
14

¿Existe la posibilidad de anular literalmente un objetivo o emular esto de alguna manera?Anulación de destino en Ant

Así, cuando llamo

<target perform-after="release"> 
    <do-something /> 
</target> 

Actuará como esto:

<target name="release"> 
    <antcall target="release" /> <!-- call previous version, not recursion --> 
    <do-something /> 
</target> 

creo que tiene un significado, voy a describir en Android ejemplo:

Tenemos una .xml plantillas para cada build.xml en la carpeta SDK ({$SDK}/tools/ant/*.xml), estos archivos están incluidos en cada build.xml generado para eac h proyecto. Solo hay -pre-compile, -pre-build y -post-compile objetivos que están vacíos y son fáciles de sobrescribir. Pero no hay un objetivo -post-release vacío, por ejemplo. Google recomienda generar build.xml comentarios solo para copiar y pegar un objetivo en mi propio build.xml y luego ajustarlo. Pero creo que no está bien, porque si Google cambia algo en este objetivo dentro de una plantilla, nunca sabré que estoy usando una versión obsoleta.

Respuesta

24

Consulte la sección "Anulación de destino" de la tarea import o la sección "Reescritura de destino" de la tarea include. En resumen, proporcione al build.xml común un nombre de proyecto como "common", y luego use "common.release" en el antcall.

Notaré que antcall no es lo mismo ya que inicia un nuevo proyecto en tiempo de ejecución, lo que significa que las variables establecidas por el destino no serán visibles más tarde. No tengo Ant disponible en esta máquina para probar, pero puede intentar algo como esto para evitar el anticata:

<target name="release" depends="common.release, -post-release"/> 
+1

Genial, eso es lo que quería y nadie me respondió) Gracias ! –

+1

Y funcionó, lo confirmo. –