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

StackOverflow https://stackoverflow.com/questions/8790

  •  08-06-2019
  •  | 
  •  

Вопрос

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

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

<import file="../utils/build/build.xml" />

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

Итак, вы можете сделать:

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

или что-то вроде того.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top