2009-05-04 9 views
7

Mam projekt z wieloma modułami, każdy w swoim własnym katalogu. Każdy moduł ma własny plik budowy ant (build.xml).Przekaż ant target do wielu plików build.xml w podkatalogach

W katalogu głównym ustawiłem ogólny plik kompilacji, który wywołuje plik budujący każdego modułu w odpowiedniej kolejności.

<?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> 

Teraz każdy moduł posiada również "czysty" target, więc dodać te linie:

<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> 

i istnieją dalsze cele takiego. Czy istnieje sposób na przepisanie pliku kompilacji, aby uniknąć tego duplikowania? Szukałem wbudowanej właściwości zawierającej aktywny cel, ale nie mogłem go znaleźć.

Odpowiedz

7

Dlaczego nie użyć antcall, aby wywołać cel, który odwołuje się do wszystkich twoich podkatalogów i sparametryzować cel, który ma zostać wywołany. na przykład

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

, a następnie:

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

więc ta pozwala sparametryzuj dzwonić do swoich podkatalogów. Jeśli dodasz nowy subdir, musisz tylko dodać ten subdir do celu 'doStuffToSubdirs' (zmieni się również to!)

+0

Tak, to działa, dziękuję. – amarillion

+0

chociaż powinno to być amarillion

+0

Poprawię to teraz. Thx dla heads up (przyznaję, że nie przetestowałem tego :-) –

2

Włóż jeden czysty cel w swojej commonbuild.xml i dziecka tylko importować pliki rodzica build.xml

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

Teraz będzie można nazwać czystą cel w dziecku buduje. Możesz również zastąpić ten cel, tworząc czysty cel w dowolnej kompilacji podrzędnej.

+0

Jeśli rozumiem to poprawnie, to zakładam, że cel "czysty" robi dokładnie to samo rzecz w każdym podkatalogu. Ale tak nie jest, szczególnie w przypadku innych celów, które mogę wywołać w ten sam sposób. – amarillion

+0

Masz rację, źle zrozumiałem twoje pytanie. –

+0

np. Jest to przydatna sztuczka, którą mogę wykorzystać jeszcze jeden dzień :) – amarillion

Powiązane problemy