Ant скрипты сборки, antcall, зависимости и т.д.
У меня есть сборка script, и как часть этого script он копирует файл jar в каталог, так как он легко позволяет называть его utils jar. утилита jar построена другой сборкой script, сидящей в другом каталоге. Что я пытаюсь сделать, если моя сборка script запускает сборку utils script, чтобы я мог убедиться, что утилита utils обновлена.
Итак, я знаю, что мне нужно импортировать файл сборки utils.
<import file="../utils/build/build.xml" />
Что не работает, потому что задача импорта, в отличие от почти всех других ant taks, не запускается с basedir, она запускается из pwd. Поэтому, чтобы обойти это, у меня есть эта маленькая мелодия, которая успешно импортирует файл сборки
<property name="baseDirUpOne" location=".." />
<import file="${baseDirUpOne}/utils/build/build.xml" />
Итак, теперь, когда я решил проблему импорта, мне нужно вызвать задачу, и это должно быть легко:
<antcall target="utils.package" />
Обратите внимание, что в приведенном выше, utils - это имя проекта.. /utils/build/build.xml
проблема, с которой я сейчас сталкиваюсь, заключается в том, что вызов ant не выполняется в.. /utils/build, поэтому мне нужно и не могу найти, это свойство runat или что-то подобное, по существу:
<antcall target="utils.package" runat="../utils/build" />
Причина, по которой я нуждаюсь в этом, заключается в том, что в моем файле сборки utils шаг для выбора кода для копирования в банку основан на относительных путях, чтобы избежать путей жесткого кодирования в моем файле ant. Есть идеи?
Ответы
Ответ 1
У меня есть что-то подобное: у меня есть главный Ant build.xml, который вызывает отдельный файл build.xml, который заботится о создании моих тестов. Вот как я это делаю:
<target name="build-tests">
<subant target="build">
<fileset dir="${test.home}" includes="build.xml"/>
</subant>
</target>
Хитрость заключается в использовании subant
вместо antcall
. Вам не нужно импортировать другой файл сборки.
Ответ 2
Попробуйте использовать задачу "ant" вместо задачи "antcall" , которая запускает импортированную сборку напрямую, а не импортирует ее в текущий файл сборки. Он имеет параметр "dir" :
каталог для использования в качестве основы для нового проекта Ant. По умолчанию текущий проект основан, если только inheritall установлено в false, в в этом случае он не имеет значения по умолчанию стоимость. Это приведет к переопределению настройка вызываемого проекта.
Итак, вы можете сделать:
<ant antfile="${baseDirUpOne}/utils/build/build.xml" dir="../utils/build" />
или что-то в этом роде.
Ответ 3
Вы можете передать params до antcall, используя вложенный в блок antcall. Таким образом, вы можете передать свойства по этому пути (возможно, даже на основе, поскольку свойства неизменяемы).