У меня есть сценарий сборки, и как часть этого сценария он копирует файл JAR в каталог, для удобства давайте назовем его утилитарным JAR. jas-файл utils создается другим сценарием сборки, который находится в другом каталоге. Что я пытаюсь сделать, так это чтобы мой скрипт сборки запустил скрипт сборки utils, чтобы я мог убедиться в актуальности jar утилит.
Так что я знаю, что мне нужно импортировать файл сборки утилит.
<import file="../utils/build/build.xml" />
Что не работает, потому что задача импорта, в отличие от почти всех других сборок, не запускается из 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 шаг по выбору кода для копирования в jar основан на относительных путях, чтобы избежать жестких путей в моем файле ant. Есть идеи?
У меня есть нечто подобное: у меня есть основной Ant build.xml, который вызывает отдельный build.xml, который заботится о создании моих тестов. Вот как я это делаю:
<target name="build-tests">
<subant target="build">
<fileset dir="${test.home}" includes="build.xml"/>
</subant>
</target>
Хитрость заключается в том, чтобы использовать subant
вместо antcall
. Вам не нужно импортировать другой файл сборки.
Попробуйте использовать задачу «ant» вместо задачи «antcall», которая запускает импортированную сборку напрямую, а не импортирует ее в текущий файл сборки. У него есть параметр "dir":
каталог для использования в качестве основы для нового проекта Ant. По умолчанию используется значение basedir текущего проекта, если для атрибута attribute не задано значение false, в этом случае значение по умолчанию отсутствует. Это переопределит настройку basedir вызываемого проекта.
Так что вы могли бы сделать:
<ant antfile="${baseDirUpOne}/utils/build/build.xml" dir="../utils/build" />
или что-то вроде того.
Вы можете передавать параметры в antcall, используя вложенные в блоке antcall. Таким образом, вы можете передать свойства таким образом (возможно, даже basedir, поскольку свойства неизменны).