| Ce site met a disposition le build journalier de la traduction francaise du Maven: The Definitive Guide Consultez : | ![]() |
Parfois, nous voulons qu'un projet hérite de certaines valeurs d'un POM parent. Vous pourriez être en train
de construire un énorme système, et vous ne voulez pas répéter les mêmes balises de dépendance encore et encore.
Vous pouvez éviter de vous répéter dans vos projets par l'héritage grâce à la balise parent.
Quand un projet spécifie un parent, il hérite de l'ensemble des informations du POM du projet parent. Il peut
redéfinir les valeurs du POM parent et en ajouter.
Tous les POMs de Maven héritent d'un POM parent. Si un
POM ne spécifie pas de parent direct au travers de la balise parent, ce
POM héritera des valeurs définies dans le Super POM. L'Exemple 9.12, « Héritage entre projets » présente la balise parent du project-a qui hérite
du POM du projet a-parent.
Exemple 9.12. Héritage entre projets
<project>
<parent>
<groupId>com.training.killerapp</groupId>
<artifactId>a-parent</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>project-a</artifactId>
...
</project>
L'exécution de la commande mvn help:effective-pom dans le project-a va
afficher un POM qui est le résultat de la fusion du Super POM avec le
POM du projet a-parent et celui du project-a. Les
héritages implicites et explicites du project-a sont présentés dans Figure 9.4, « Héritage pour les projets a-parent et project-a ».
Quand un projet spécifie un projet parent, Maven utilise le POM de ce parent comme
point de départ avant de traiter le POM du projet courant. Il hérite de tout, jusqu'au
groupId et au numéro de version. Vous pouvez remarquer que le
project-a ne spécifie aucun des deux, le groupId et la
version sont tous les deux hérités du projet a-parent. Lorsqu'une balise
parent est présente, tout ce qu'un POM a besoin de définir est l'artifactId.
Cela n'est pas obligatoire, le project-a peut avoir un groupId et une
version différents de ceux du parent, mais s'ils ne sont pas définis alors Maven utilisera ceux
du POM parent. Si vous commencez à utiliser Maven pour gérer et construire de gros projets
multimodules, vous aurez souvent à créer des projets qui auront un même groupId et une même
version.
Quand vous héritez d'un POM, vous avez le choix entre utiliser les valeurs héritées de ce POM ou les surcharger sélectivement. Ce qui suit est une liste d'éléments qu'un POM Maven hérite de son POM parent :
les identifiants (il faut au moins surcharger le groupId ou
l'artifactId).
les dépendances
les développeurs et les contributeurs
les listes de plugins
les listes de rapports
les exécutions de plugin (les exécutions qui ont le même id sont fusionnées)
les configuration de plugin
Quand Maven hérite de dépendances, il va ajouter les dépendances définies dans les projets fils à celles des
projets parents. C'est ainsi que vous pouvez spécifier des dépendances utilisées tout au long de projets qui
héritent d'un même POM parent. Par exemple, si votre projet fait usage de Log4J pour ses
traces, vous pouvez ajouter cette dépendance dans votre POM de plus haut niveau. Tous les
projets qui hériteront de ce POM auront automatiquement Log4J comme dépendance. De même, si vous
voulez vous assurer que tous vos projets utilisent la même version d'un plugin Maven, vous pouvez définir la
version de ce plugin Maven dans la section pluginManagement d'un POM parent
de haut niveau.
Maven assume que le POM parent est disponible dans le dépôt local ou dans le répertoire
parent (../pom.xml) du projet courant. Si aucune de ces options n'est valide, ce comportement
par défaut peut être redéfini par la balise relativePath. Par exemple, certaines organisations
préfèrent une structure à plat des projets où le fichier pom.xml du projet parent ne se
trouve pas dans le répertoire parent d'un projet fils. Il peut se trouver dans un répertoire au même niveau que
celui du projet. Si votre projet fils se trouve dans le répertoire ./projet-a et que le
projet parent se trouve dans ./a-parent, vous préciserez dans le POM le
chemin relatif du projet parent-a ainsi :
<project>
<parent>
<groupId>org.sonatype.mavenbook</groupId>
<artifactId>a-parent</artifactId>
<version>1.0-SNAPSHOT</version>
<relativePath>../a-parent/pom.xml</relativePath>
</parent>
<artifactId>projet-a</artifactId>
</project>