49 votes

ant dépend de antcall

Lors de la définition des étapes de construction séquentielle J'utilise le depends attribut de l' target élément. J'ai récemment vu un fichier ant, dans lequel la séquence de construction était définie par antcall éléments dans les cibles. Pour illustrer :

 <target name="a" depends="b">
...</target>
 

contre

 <target name="a">
<antcall target="b"/>
...</target>
 

Existe-t-il une réelle différence entre les deux approches? L'un d'entre eux est-il préférable?

83voto

Richard Steele Points 1021

La plus grande différence est que la Fourmi va s'assurer que les dépendances déclarées par depends sont appelé plus d'une fois. Par exemple:

<target name="a" />

<target name="b" depends="a" />

<target name="c" depends="a" />

<target name="d" depends="b, c" />

Si je l'appelle cible d, b et c sont appelés. Toutefois, a n'est appelée qu'une fois (même si les deux b et c en dépend).

Supposons maintenant que nous décidons d'utiliser des antcall au lieu de dépend pour cible d:

<target name="d">
   <antcall target="b" />
   <antcall target="c" />
</target>

L'appel de la cible d fera alors appel à des cibles b et c; cependant, la cible a seront appelés à deux reprises, une fois pour l' b , puis de nouveau pour c.

En d'autres termes, antcall élude la normale règles de dépendances qui sont la pierre angulaire de la Fourmi.

Je ne pense pas qu' antcall devraient être utilisées comme un substitut à la normale Ant-comme dépendances; c'est ce qu' depends est pour. Donc, quand vous l'utiliser? L' antcall de la tâche ne vous permettent de contrôler les propriétés et les références sont définis (c'est pourquoi une nouvelle Ant de l'environnement est créé, et pourquoi c'est si lent), donc il peut être utilisé pour créer des variantes de la même chose; par exemple, peut-être deux pots, l'un avec et l'autre sans les symboles de débogage.

La surutilisation antcall, cependant, crée lente, fragile, et difficiles à maintenir des scripts de génération. Il pense que le goto de Ant--c'est mal. La plupart des bien-écrit les scripts de compilation tout simplement n'en avez pas besoin, sauf dans de rares cas.

57voto

Laurent Pireyn Points 3737

La principale différence entre les deux approches est que les cibles en depends sont toujours exécutés, tandis que les cibles en antcall sont exécutées que si la cible contenant est.

Une clarification exemple:

<target name="a" depends="b" if="some.flag">

</target>

Ici, b sera toujours exécuté, tandis que d' a sera exécuté uniquement si some.flag est défini.

<target name="a" if="some.flag">
    <antcall target="b" />
</target>

Ici, b ne sera exécutée que si a est, c'est à dire si some.flag est défini.

15voto

Vladimir Dyuzhev Points 10647

Antcall est relativement peu utilisé, car:

Les cibles appelées sont exécutées dans un nouveau projet; sachez que cela signifie que les propriétés, références, etc. définies par les cibles appelées ne seront pas conservées dans le projet appelant.

En d'autres termes, antcall est un tout nouveau processus Ant en cours d'exécution.

7voto

thekbb Points 3092

antcall est le GOTO de fourmi. Il est terrible. C'est un excellent moyen de faire un nid de rat de difficile à maintenir les fichiers inutiles. À côté de ant-contrib c'est le meilleur moyen de sentir trop complexes difficile à maintenir ant fichier. (même un bon antfile est rude)

Si vos dépend sont définis correctement, vous devriez être en mesure d'exécuter n'importe quelle cible jusqu'à ce point, avec succès, à la différence de la antcall modèle.

Une autre raison, personne ne l'a touché sur est vizant, la capacité à générer un graphique de votre cible dépendances est assez doux, si c'est compliqué à construire. Si vous utilisez antcall vous êtes foutu.

Je souhaite @Vladimir Dyuzhev était correct que antcall est rarement utilisé - j'ai été à beaucoup de magasins où c'est la norme.

0voto

ponds Points 403
   <target name="a" depends="b"> ...</target> 
 

Cela signifie qu'avant d'exécuter toute instruction ou toute balise de la cible a, ANT s'assure que la cible b est exécutée avec succès

Et vous pouvez appeler n'importe quelle cible en utilisant antcall après que certaines instructions ou balises ont été exécutées à partir de la cible appelante.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X