2009-04-21 7 views
3

J'ai un tas de sous-projets dans divers répertoires. Je veux les spécifier comme une liste, puis pour une cible donnée, je veux passer par chacun, un par un et appeler subant.Comment appliquer des cibles à une sous-liste de projets dans Ant?

J'ai quelque chose comme:

<target name="run"> 
    <subant target="run" failonerror="true" verbose="true"> 
     <fileset dir="${projectA}" includes="build.xml"/> 
    </subant> 
    <subant target="run" failonerror="true" verbose="true"> 
     <fileset dir="${projectB}" includes="build.xml"/> 
    </subant> 
</target> 

Mais je dois préciser une ligne subant distincte pour chaque projet et chaque ensemble cible. Tout ce que je veux faire est de créer une propriété qui est une liste de sous-projets, et l'utiliser d'une manière ou d'une autre. Il doit être simple, mais ....

Répondre

5

Vous pouvez définir une macro pour ce faire:

<macrodef name="iterate-projects"> 
    <attribute name="target" /> 
    <sequential> 
     <subant target="@{target}"> 
      <filelist dir="${src_dir}"> 
       <file name="projectA/build.xml"/> 
       <file name="projectB/build.xml"/> 
       <file name="projectC/build.xml"/> 
      </filelist> 
     </subant> 
    </sequential> 
</macrodef> 

Puis d'une autre une tâche, vous pouvez appeler une cible sur l'ensemble des constructions dans l'ordre, par exemple :

<target name="clean" description="Clean all projects"> 
    <iterate-projects target="clean"/> 
</target> 
+0

Nice, cela a bien fonctionné quand j'ai mis src_dir à ... (mon projet buildAll est au même niveau que les autres). –

Questions connexes