| Ce site met a disposition le build journalier de la traduction francaise du Maven: The Definitive Guide Consultez : | ![]() |
Une fois que vous avez adopté Maven dans votre multinationale, vous allez vous demander
s'il n'existe pas une meilleure manière de gérer les versions des dépendances dans vos deux cent vingt projets
Maven interdépendants. Si chaque projet qui utilise une dépendance comme le connecteur Java de MySQL doit gérer
dans son coin le numéro de version de cette dépendance, vous allez au-devant de graves problèmes le jour où
vous allez faire évoluer cette version. Puisque les numéros de version sont répartis sur toute l'arborescence du projet,
vous allez devoir éditer à la main chacun des fichiers pom.xml qui fait référence à cette
dépendance pour être sûr de mettre à jour ce numéro de version partout. Même avec des commandes comme
find, xargs, et awk, vous risquez d'oublier un
POM.
Heureusement, Maven fournit un moyen de consolider le numéro de version d'une dépendance grâce à la balise
dependencyManagement. Vous rencontrerez habituellement la balise
dependencyManagement dans un POM parent de haut niveau d'une organisation ou
d'un projet. L'utilisation de la balise dependencyManagement dans un fichier
pom.xml vous permet de référencer une dépendance dans un projet fils sans avoir à spécifier
la version. Maven va parcourir la hiérarchie des POMs jusqu'à ce qu'il trouve un projet avec une balise
dependencyManagement, il utilisera alors la version déclarée dans cette balise
dependencyManagement.
Par exemple, si vous avez un grand nombre de projets qui utilisent le connecteur Java MySQL dans sa version
5.1.2, vous pourriez écrire la balise dependencyManagement suivante dans le
POM de plus haut niveau de votre projet multimodule.
Exemple 3.9. Définition des versions dans un POM de haut niveau
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>org.sonatype.mavenbook</groupId>
<artifactId>a-parent</artifactId>
<version>1.0.0</version>
...
<dependencyManagement>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.2</version>
</dependency>
...
<dependencies>
</dependencyManagement>
Vous pourrez alors, dans un projet fils, ajouter une dépendance au connecteur Java MySQL avec le XML suivant :
<project>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.sonatype.mavenbook</groupId>
<artifactId>a-parent</artifactId>
<version>1.0.0</version>
</parent>
<artifactId>project-a</artifactId>
...
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
</dependencies>
</project>
Faites attention au fait que le projet fils n'a pas déclaré explicitement la version de la dépendance à
mysql-connector-java. Comme cette dépendance a été déclarée dans la balise
dependencyManagement du POM de plus haut niveau, le numéro de version
va se propager jusqu'à la dépendance mysql-connector-java du projet fils. Attention, si le
projet fils avait défini une version, celle-ci aurait remplacé la version définie dans la section
dependencyManagement du POM de plus haut niveau. Tout cela signifie que
la version déclarée dans dependencyManagement n'est utilisée que lorsque le projet fils ne
déclare pas de version.
La gestion des dépendances avec un POM de haut niveau est différente de la
déclaration d'une dépendance partagée au travers d'un POM parent. Pour commencer, toutes
les dépendances sont héritées. Si mysql-connector-java était déclarée comme une dépendance
du projet de plus haut niveau, chaque projet fils ferait référence à cette dépendance. Au lieu d'ajouter des
dépendances inutiles, l'utilisation de la balise dependencyManagement vous permet de
consolider et de centraliser la gestion des versions des dépendances sans ajouter de dépendances héritées
par tous les projets fils. En d'autres termes, la balise dependencyManagement est
équivalente à une variable d'environnement qui vous permet de déclarer une dépendance dans un sous-projet sans
avoir à préciser de numéro de version.