2009-05-04 2 views
7

У меня есть проект с несколькими модулями, каждый в своем собственном каталоге. Каждый модуль имеет собственный файл сборки Ant (build.xml)Пропустить муравьиную цель в несколько файлов build.xml в подкаталогах

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

<?xml version="1.0"?> 
<project name="bridgedb" default="all" basedir="."> 
    <target name="all"> 
    <ant dir="corelib"/> 
    <ant dir="tools"/> 
    <ant dir="makeGdb"/> 
    <ant dir="cytoscape-plugin"/> 
    </target> 
</project> 

Теперь каждый модуль также имеет «чистую» цель, так что я добавить эти строки:

<target name="clean"> 
    <ant dir="corelib" target="clean"/> 
    <ant dir="tools" target="clean"/> 
    <ant dir="makeGdb" target="clean"/> 
    <ant dir="cytoscape-plugin" target="clean"/> 
    </target> 

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

ответ

7

Почему бы не использовать antcall, чтобы вызвать цель, которая ссылается на все ваши поддиры, и параметризовать цель, которую нужно вызвать. например

<antcall target="doStuffToSubdirs"> 
    <!-- let's clean --> 
    <param name="param1" value="clean"/> 
    </antcall> 

, а затем:

<target name="doStuffToSubdirs"> 
    <ant dir="corelib" target="${param1}"/> 
    <ant dir="tools" target="${param1}"/> 
    ...etc 
</target> 

так что это позволяет параметризацию вызовы ваших подкаталоги. Если вы добавите новый subdir, вам нужно будет добавить этот subdir к цели doTuffToSubdirs (я бы тоже переименовал это!)

+0

Да, это работает, спасибо. – amarillion

+0

хотя это должно быть amarillion

+0

Я исправлю это сейчас. Thx для хедз-ап (признаюсь, я не тестировал это :-) –

2

Положите одну чистую цель в вашем commonbuild.xml и в ребенке файлы просто импортировать родительский build.xml

<import file="${parent.dir}/commonbuild.xml" /> 

Теперь вы будете в состоянии назвать чистую цель в ваш ребенок строит. Вы также можете переопределить эту цель, создав чистую цель в любой из ваших дочерних сборников.

+0

Если я правильно понимаю это, предполагается, что «чистая» цель делает то же самое в каждом подкаталоге. Но это не так, особенно не для других целей, которые я, возможно, захочу назвать аналогичным образом. – amarillion

+0

Вы правы, я неправильно понял ваш вопрос. –

+0

np, это полезный трюк, который я могу использовать в другой день :) – amarillion