Передайте цель ant нескольким файлам build.xml в подкаталогах
Вопрос
У меня есть проект с несколькими модулями, каждый в своем каталоге. Каждый модуль имеет свой собственный файл сборки ant (build.xml)
В корневом каталоге я установил общий файл сборки, который вызывает файл сборки каждого модуля в правильном порядке.
<?xml version="1.0"?>
<project name="bridgedb" default="all" basedir=".">
<target name="all">
<ant dir="corelib"/>
<ant dir="tools"/>
<ant dir="makeGdb"/>
<ant dir="cytoscape-plugin"/>
</target>
</project>
Теперь в каждом модуле также есть "чистый" текст. цель, поэтому я добавляю эти строки:
<target name="clean">
<ant dir="corelib" target="clean"/>
<ant dir="tools" target="clean"/>
<ant dir="makeGdb" target="clean"/>
<ant dir="cytoscape-plugin" target="clean"/>
</target>
И таких целей больше. Есть ли способ переписать файл сборки, чтобы избежать этого дублирования? Я искал встроенное свойство, содержащее активную цель, но не смог его найти.
Решение
Почему бы не использовать antcall для вызова цели, которая ссылается на все ваши подкаталоги, и параметризовать цель, которая будет вызвана. например.
<antcall target="doStuffToSubdirs">
<!-- let's clean -->
<param name="param1" value="clean"/>
</antcall>
а затем:
<target name="doStuffToSubdirs">
<ant dir="corelib" target="${param1}"/>
<ant dir="tools" target="${param1}"/>
...etc
</target>
, так что это позволяет вам параметризировать вызовы к вашим подкаталогам. Если вы добавляете новый subdir, вам нужно только добавить этот subdir в цель 'doStuffToSubdirs' (я бы тоже переименовал это!)
Другие советы
Поместите одну чистую цель в ваш commonbuild.xml, а в дочерние файлы просто импортируйте ваш родительский build.xml
<import file="${parent.dir}/commonbuild.xml" />
Теперь вы сможете вызывать чистую цель в ваших дочерних сборках. Вы также можете переопределить эту цель, создав чистую цель в любой из ваших дочерних сборок.