2009-05-28 12 views

Respuesta

11

Crea una versión del objetivo sin "ocultar". Si tenías

<target name="A" depends="B"> 
    ... 
</target> 

Cambiar para

<target name="A" depends="B,AwithoutDeps"/> 

<target name="AwithoutDeps"> 
    ... 
</target> 

Ahora se puede llamar una forma normal (que disparar B entonces AwithoutDeps) o simplemente llamar AwithoutDeps explícita y no hay deps disparado. [Nota que "depende" llama a las dependencias con el fin]

Por supuesto, elegir algunos nombres mejor que estos;)

+0

Muy similar a mi solución: creo que la diferencia es solo una cuestión de estilo. Esto explota la funcionalidad de dependencia de hormiga, mi solución explota la funcionalidad de "encapsulación". – Jared

+0

¡Gracias! Esto parece más limpio que copiar y pegar. – GreenieMeanie

+0

@Jared - También pensé en avisos antivuelco, pero es más caro AFAIK, ya que establece una copia de las propiedades y tal. No es que sea un gran problema ... –

2

Creo que su única opción simple aquí sería simplemente hacer una copia del objetivo en cuestión y hacer que no tenga dependencias.

+0

Solo estoy eliminando los atributos de los dependientes ahora (que es casi lo mismo), pero me pregunto si existe una solución más limpia. – GreenieMeanie

+0

Sería bueno tener esto como una opción para la línea de comando ant. – user959690

1

me gustaría hacer algo como esto:

<target name="doSomethingNoDeps"> 
    ... 
</target> 

<target name="doSomething" depends="doSomeOther"> 
    <antcall target="doSomethingNoDeps"/> 
</target> 
2

Una posibilidad es utilizar el atributo if o unless en el (los) objetivo (s) de dependencia. Por ejemplo:

<target name="dependency1" unless="dependency1.disabled"> 
    <echo>Hello from dependency 1!</echo> 
</target> 

<target name="dependency2" unless="dependency2.disabled"> 
    <echo>Hello from dependency 2!</echo> 
</target> 

<target name="main-target" depends="dependency1, dependency2"> 
    <echo>Hello from the main target!</echo> 
</target> 

Ahora se puede ejecutar con Ant -Ddependency1.disabled=true y/o -Ddependency2.disabled=true a dejar de lado las dependencias que no desea, pero por defecto todavía habrá que incluirlos.

Y por supuesto, simplemente podría tener una propiedad "global" dependencies.disabled si es más fácil para usted.

Si usted quiere hacer la inversa de este comportamiento (en la que las dependencias están excluidas por defecto), sólo tiene que utilizar el if en lugar de unless (y tienen nombres de propiedades como "dependency1.enabled" en lugar de "desactivado") .

-1

Hice macro con código, lo que quiero. Luego hizo 2 objetivos, 1 macro de llamadas con "arg1", 2nd con "arg2". También puede hacer macro sin parámetros aceepting.

+0

an la respuesta debe mostrar cómo resolver el problema. muestra lo que hiciste –

Cuestiones relacionadas