La mayor diferencia es que Ant se asegurará de que las dependencias declaradas a través de depends
se llamen como máximo una vez. Por ejemplo:
<target name="a" />
<target name="b" depends="a" />
<target name="c" depends="a" />
<target name="d" depends="b, c" />
Si llamo objetivo d
, b
c
y son llamados. Sin embargo, a
solo se llama una vez (aunque ambos b
y c
dependen de ello).
Ahora supongamos que decidimos utilizar antcall
lugar de destino depende de d
:
<target name="d">
<antcall target="b" />
<antcall target="c" />
</target>
la designación de objetivos d
ahora llamar a los objetivos y b
c
; sin embargo, se llamará al objetivo a
dos veces, una para b
y nuevamente para c
.
En otras palabras, antcall
elude las reglas de dependencia normales que son la piedra angular de Ant.
No creo que antcall
se deba usar como un sustituto de las dependencias normales similares a Ant; para eso es depends
. Entonces, ¿cuándo lo usarías? La tarea antcall
le permite controlar qué propiedades y referencias se definen (razón por la cual se crea un nuevo entorno Ant y por qué es tan lento) para que pueda usarse para crear variantes de la misma cosa; por ejemplo, tal vez dos jarras, una con y otra sin símbolos de depuración.
La sobreutilización de antcall
, sin embargo, crea secuencias de comandos de construcción lentas, frágiles y difíciles de mantener. Piense en ello como el goto
de Ant - es malvado. La mayoría de los scripts de compilación bien escritos simplemente no lo necesitan excepto en casos inusuales.
El único momento en que ** antcall ** es necesario es cuando está migrando de hormiga a gradle, y llamando a objetivos antis de gradle. En ese caso, su compilación de hormigas no puede ejecutar los objetivos ** depende **, en cuyo caso deberá usar 'antcall'. –