2008-08-12 4 views
26

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

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

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

Который не работает, потому что задача импорта, в отличие от почти всех других муравьев TAKS, не бежит от BASEDIR, он работает от PWD. Таким образом, чтобы обойти, что у меня есть эта маленькая песенка, которая делает успешно импортировать файл сборки

<property name="baseDirUpOne" location=".." /> 
    <import file="${baseDirUpOne}/utils/build/build.xml" /> 

Так что теперь Ive решить мою проблему импорта мне нужно вызвать задачу, так что должно быть легко право:

<antcall target="utils.package" /> 

обратите внимание, что в приведенном выше, Utils это название проекта ../utils/build/build.xml

проблема сейчас я бегу в том, что муравей вызов не выполняется в. ./utils/build, так что мне нужно и не могу найти, есть Runat свойство или нечто подобное, по существу:

<antcall target="utils.package" runat="../utils/build" /> 

Причина мне нужно это, что в моих утилитами файл сборки на шаг, чтобы выбрать, какой код, чтобы скопировать в банку на основе относительных путей, чтобы избежать жесткого кодирования путей в моем муравьином файле. Есть идеи?

ответ

33

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

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

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

+0

Что делать, если вам нужно настроить путь к классам в целевой субантере? – 2009-09-23 18:10:19

6

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

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

Так что вы можете сделать:

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

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

+2

Сделайте это <муравей ... в отличие от 2010-05-07 03:00:44

0

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