Подтвердить что ты не робот

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. Есть идеи?

4b9b3361

Ответ 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. Таким образом, вы можете передать свойства по этому пути (возможно, даже на основе, поскольку свойства неизменяемы).