Самое большое отличие состоит в том, что Ant гарантирует, что зависимости, объявленные через depends
, будут называться не более одного раза. Например:
<target name="a" />
<target name="b" depends="a" />
<target name="c" depends="a" />
<target name="d" depends="b, c" />
Если я вызываю цель d
, b
и c
. Однако a
вызывается только один раз (хотя от него зависят и b
, и c
).
Теперь предположим, что мы решили использовать antcall
вместо зависимости от цели d
:
<target name="d">
<antcall target="b" />
<antcall target="c" />
</target>
Вызов цели d
теперь будет вызывать цели b
и c
; однако цель a
будет вызываться дважды: один раз для b
, а затем снова для c
.
Другими словами, antcall
обходит обычные правила зависимости, которые являются краеугольным камнем Ant.
Я не думаю, что antcall
следует использовать вместо обычных Ant-подобных зависимостей; для этого depends
. Так когда бы вы использовали это? Задача antcall
позволяет вам контролировать, какие свойства и ссылки определены (именно поэтому создается новая среда Ant - и почему она такая медленная), поэтому ее можно использовать для создания вариантов одной и той же вещи; например, может быть два фляги, один с и один без символов отладки.
Однако чрезмерное использование antcall
создает медленные, хрупкие и сложные в обслуживании сценарии сборки. Думайте об этом как о goto
муравья - это зло. Большинству хорошо написанных сценариев сборки это просто не нужно, за исключением необычных случаев.