Скрипты сборки Ant, вызов Ant, зависимости и т. Д.

У меня есть сценарий сборки, и как часть этого сценария он копирует файл jar в каталог, для простоты назовем его utils jar. jar-файл utils создается другим сценарием сборки, находящимся в другом каталоге. Что я пытаюсь сделать, чтобы мой сценарий сборки запускал сценарий сборки utils, чтобы я мог убедиться, что файл utils jar обновлен.

Итак, я знаю, что мне нужно импортировать файл сборки utils.

<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 шаг по выбору кода для копирования в банку основан на относительных путях, чтобы избежать жестких путей в моем файле ant. Любые идеи?

Ответов (3)

Решение

У меня есть что-то похожее: у меня есть основной 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 текущего проекта, если только для параметра inheritall не задано значение false, и в этом случае он не имеет значения по умолчанию. Это переопределит настройку basedir вызываемого проекта.

Итак, вы могли:

<ant antfile="${baseDirUpOne}/utils/build/build.xml" dir="../utils/build" />

или что-то подобное.

Вы можете передать параметры в antcall, используя вложенный в блок antcall. Таким образом, вы можете передать свойства таким образом (возможно, даже на основе их, поскольку свойства неизменяемы).