Сценарии сборки Ant, antcall, зависимости и т.д. - PullRequest
27 голосов
/ 12 августа 2008

У меня есть скрипт сборки, и как часть этого скрипта он копирует файл JAR в каталог, для простоты давайте назовем его утилитарным JAR. jar-файл 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. Есть идеи?

Ответы [ 3 ]

33 голосов
/ 12 августа 2008

У меня есть нечто подобное: у меня есть основной Ant build.xml, который вызывает отдельный build.xml, который заботится о создании моих тестов. Вот как я это делаю:

<target name="build-tests">
    <subant target="build">
      <fileset dir="${test.home}" includes="build.xml"/>
    </subant>
</target>

Хитрость в том, чтобы использовать subant вместо antcall. Вам не нужно импортировать другой файл сборки.

6 голосов
/ 12 августа 2008

Попробуйте использовать задачу "ant" вместо задачи "antcall", которая запускает импортированную сборку напрямую, а не импортирует ее в текущий файл сборки. Имеет параметр "dir":

каталог для использования в качестве основы для нового проекта Ant. По умолчанию основатель текущего проекта, если Параметр наследия установлен в false, в в этом случае он не имеет значения по умолчанию значение. Это переопределит basedir настройка вызываемого проекта.

Чтобы вы могли сделать:

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

или что-то в этом роде.

0 голосов
/ 27 сентября 2008

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

...