2009-05-04 7 views
7

J'ai un projet avec plusieurs modules, chacun dans son propre répertoire. Chaque module a son propre fichier de construction de fourmi (build.xml)Transmettre la cible ant à plusieurs fichiers build.xml dans des sous-répertoires

Dans le répertoire racine j'ai mis en place un fichier de construction générale qui appelle le fichier de construction de chaque module dans l'ordre.

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

Maintenant, chaque module dispose également d'une cible « propre », donc j'ajouter ces lignes:

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

Et il y a plus de cibles comme ça. Est-il possible de réécrire le fichier de construction pour éviter cette duplication? J'ai cherché une propriété intégrée qui contient la cible active, mais je ne l'ai pas trouvée.

Répondre

7

Pourquoi ne pas utiliser antcall pour appeler une cible qui fait référence à toutes vos subdirs, et la cible à paramétrer l'appeler. par exemple.

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

puis:

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

donc ce qui vous permet de paramétrer les appels à votre subdirs. Si vous ajoutez un nouveau sous-répertoire, vous n'avez qu'à ajouter ce sous-répertoire à la cible 'doStuffToSubdirs' (je le renommerais aussi!)

+0

Yup cela fonctionne, merci. – amarillion

+0

bien qu'il devrait être amarillion

+0

Je vais corriger cela maintenant. Thx pour les heads up (j'avoue que je n'ai pas testé ça :-) –

2

Mettre une cible propre dans votre commonbuild.xml et l'enfant importer des fichiers que votre parent build.xml

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

Maintenant, vous serez en mesure d'appeler la cible propre dans votre enfant construit. Vous pouvez également remplacer cette cible en créant une cible propre dans l'une de vos constructions enfant.

+0

Si je comprends bien, cela suppose que la cible "propre" fait exactement la même chose chose dans chaque sous-répertoire. Mais ce n'est pas le cas, surtout pas pour d'autres cibles que je souhaite appeler de la même manière. – amarillion

+0

Vous avez raison d'avoir mal compris votre question. –

+0

np, c'est une astuce utile aussi que je peux utiliser un autre jour :) – amarillion

Questions connexes