Переопределение цели в Ant - PullRequest
15 голосов
/ 08 августа 2011

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

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

<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 Ответ

25 голосов
/ 08 августа 2011

См. Раздел «Переопределение цели» задачи import или раздел «Перезапись цели» задачи include . Вкратце, дайте общему build.xml имя проекта, например «common», а затем используйте «common.release» в antcall.

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

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