Maven 2 gére automatiquement des projets complexes au travers des mécanismes de modules: structure arborescente de projets et sous-projets.
<project> ... <modules> <module>fidl-idl3</module> <module>fidl-lang</module> <module>fidl-java</module> <module>maven-fidl-plugin</module> <module>fidl-site</module> </modules> ... </project>
Le tag <module> contient un chemin relatif au POM courant (celui dans lequel se trouvent indiqués les modules). La configuration suivante est valide:
<project> ... <modules> <module>../fidl-idl3</module> </modules> ... </project>
La structure des modules peut être arbitrairement compliqué (sans aboutir à un cycle. Le POM d'un noeud de l'arbre des modules doit avoir un packaging de type pom
Le mécanisme des modules est indépendant de l'héritage
En pratique, les deux sont généralement liés: le POM racine du projet est parent de tous les autres.
L'exécution de maven dans un noeud provoque son exécution dans tous les modules (et sous modules): principe du réacteur
~/fidl $> mvn packag.e Maven version: 2.0.4 [INFO] Scanning for projects... [INFO] Reactor build order: [INFO] FIDL Tool Suite [INFO] FIDL IDL3 Language [INFO] FIDL Language Core [INFO] FIDL Java target handler [INFO] Maven FIDL Plugin [INFO] FIDL Tool site ... [INFO] ---------------------------------------------------------------------------- [INFO] Building FIDL IDL3 Language [INFO] task-segment: [package] [INFO]---------------------------------------------------------------------------- ... [INFO] ---------------------------------------------------------------------------- [INFO] Building FIDL Language Core [INFO] task-segment: [package] [INFO] ---------------------------------------------------------------------------- ...
L'ordre d'exécution dépend du calcul des dépendances entre modules: construction du graphe (acyclique) de dépendance et tri topologique dessus.