2009-05-04 8 views
7

Ich habe ein Projekt mit mehreren Modulen, jedes in einem eigenen Verzeichnis. Jedes Modul hat seine eigene Ameisen-Build-Datei (build.xml)Übergeben Sie ant-Ziel an mehrere build.xml-Dateien in Unterverzeichnissen

Im Stammverzeichnis habe ich eine allgemeine Build-Datei eingerichtet, die die Build-Datei jedes Moduls in der richtigen Reihenfolge aufruft.

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

Jetzt jedes Modul hat auch ein „sauberes“ Ziel, so füge ich diese Zeilen:

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

Und es gibt mehr Ziele ähnlich. Gibt es eine Möglichkeit, die Build-Datei neu zu schreiben, um diese Duplizierung zu vermeiden? Ich habe nach einer integrierten Eigenschaft gesucht, die das aktive Ziel enthält, konnte sie jedoch nicht finden.

Antwort

7

Warum nicht antcall verwenden, um ein Ziel aufzurufen, das auf alle Ihre Unterverzeichnisse verweist, und das Ziel, das aufgerufen werden soll, zu parametrisieren. z.B.

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

und dann:

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

so ermöglicht dies, um die Anrufe an Ihre subdirs parametrisieren. Wenn Sie ein neues Unterverzeichnis hinzufügen, müssen Sie dieses Unterverzeichnis nur dem Ziel 'doStuffToSubdirs' hinzufügen (das würde ich auch umbenennen!)

+0

Yup das funktioniert, danke. – amarillion

+0

obwohl es sollte amarillion

+0

Ich werde das jetzt korrigieren. Danke für die Heads up (Ich gestehe, dass ich das nicht getestet habe :-) –

2

ein sauberes Ziels in Ihrem commonbuild.xml Setzen und in dem Kind

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

jetzt Ihre Eltern Dateien nur build.xml importieren Sie das sauberen Ziel zu nennen in der Lage, in Ihrem Kind aufbaut. Sie können dieses Ziel auch überschreiben, indem Sie in einem Ihrer untergeordneten Builds ein sauberes Ziel erstellen.

+0

Wenn ich das richtig verstehe, nimmt das an, dass das "saubere" Ziel genau dasselbe tut Sache in jedem Unterverzeichnis. Aber das ist nicht der Fall, besonders nicht für andere Ziele, die ich in gleicher Weise nennen möchte. – amarillion

+0

Sie sind richtig, ich habe Ihre Frage missverstanden. –

+0

np, das ist ein nützlicher Trick auch, dass ich einen anderen Tag verwenden kann :) – amarillion

Verwandte Themen