Перенаправление цели в Ant

Есть ли возможность буквально переопределить цель или подражать этому как-то?

Итак, когда я звоню

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

Он будет действовать следующим образом:

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

Я думаю, что это имеет смысл, я опишу пример Android:

У нас есть .xml шаблоны для каждой build.xml в папке SDK ({$SDK}/tools/ant/*.xml), эти файлы включаются в каждый сгенерированный build.xml для каждого проекта. Есть только теги -pre-compile, -pre-build и -post-compile, которые пусты и легко переопределяются. Но, например, нет пустой цели -post-release. Google рекомендует создавать сгенерированные комментарии build.xml только для того, чтобы скопировать-вставить цель в мой собственный build.xml, а затем настроить ее. Но я думаю, что это не нормально, потому что если Google изменит что-то в этой цели внутри шаблона, я никогда не узнаю, что использую устаревшую версию.

Ответ 1

См. раздел "Целевое переопределение" import или раздел "Перенаправление цели" include. Короче говоря, дайте common build.xml имя проекта, например "common", а затем используйте "common.release" в antcall.

Отмечу, что antcall не совсем то же самое, поскольку он запускает новый проект во время выполнения, что означает, что переменные, заданные целевым объектом, не будут отображаться позже. У меня нет Ant, доступных на этой машине для тестирования, но вы можете попробовать что-то вроде этого, чтобы избежать antcall:

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