| Ce site met a disposition le build journalier de la traduction francaise du Maven: The Definitive Guide Consultez : | ![]() |
Maven peut être utilisé pour tout gérer, depuis des systèmes composés d'un projet tout simple à des systèmes comprenant des dizaines de sous-modules liés les uns aux autres. Pour utiliser Maven, il ne suffit pas d'apprendre la syntaxe nécessaire à sa configuration, il faut apprendre le "Maven Way" (la "manière Maven"). Il s'agit d'un ensemble de bonnes pratiques pour organiser et construire des projets avec Maven. Cette section essaye d'en donner certains éléments pour vous éviter d'avoir à creuser dans les strates de fils de discussions des listes de diffusion de Maven qui se sont accumulées au cours des années.
Si vous avez un ensemble de dépendances qui sont logiquement liées les unes aux autres vous pouvez créer un
projet de type pom qui va les regrouper. Par exemple, supposons que votre application utilise
Hibernate, un célèbre framework de mapping Objet-Relationnel. Tout projet qui utilise Hibernate dépend aussi de
Spring et du pilote JDBC pour MySQL. Au lieu d'avoir à déclarer ces dépendances dans chaque
projet qui utilise Hibernate, Spring et MySQL vous pourriez créer un POM spécial qui ne fait
rien d'autre que de déclarer un ensemble de dépendances communes. Vous pourriez ainsi créer un projet
persistence-deps (un raccourci pour Dépendances de Persistance) et déclarer dans chaque projet
qui nécessite une fonction de persistance, une dépendance à ce projet :
Exemple 3.13. Consolidation des dépendances dans un projet POM
<project>
<groupId>org.sonatype.mavenbook</groupId>
<artifactId>persistence-deps</artifactId>
<version>1.0</version>
<packaging>pom</packaging>
<dependencies>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate</artifactId>
<version>${hibernateVersion}</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-annotations</artifactId>
<version>${hibernateAnnotationsVersion}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-hibernate3</artifactId>
<version>${springVersion}</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysqlVersion}</version>
</dependency>
</dependencies>
<properties>
<mysqlVersion>(5.1,)</mysqlVersion>
<springVersion>(2.0.6,)</springVersion>
<hibernateVersion>3.2.5.ga</hibernateVersion>
<hibernateAnnotationsVersion>3.3.0.ga</hibernateAnnotationsVersion>
</properties>
</project>
Si vous créez ce projet dans un répertoire persistence-deps, tout ce que vous avez à faire
ensuite est d'écrire ce fichier pom.xml et d'exécuter la commande mvn
install. Comme c'est un projet dont le packaging est de type pom, ce
POM s'installe dans votre dépôt local. Vous pouvez maintenant ajouter ce projet comme
dépendance de votre projet et toutes ses dépendances seront automatiquement ajoutées à votre projet. Quand vous
ajoutez une dépendance vers ce projet persistence-deps, n'oubliez pas de spécifier qu'il s'agit
d'une dépendance dont le packaging est de type pom.
Exemple 3.14. Déclaration d'une dépendance vers un POM
<project>
<description>Ce projet nécessite JDBC</description>
...
<dependencies>
...
<dependency>
<groupId>org.sonatype.mavenbook</groupId>
<artifactId>persistence-deps</artifactId>
<version>1.0</version>
<type>pom</type>
</dependency>
</dependencies>
</project>
Si plus tard vous décidez de changer de pilote JDBC (en utilisant par exemple
JTDS), vous n'avez qu'à remplacer les dépendances dans le projet
persistence-deps pour utiliser
net.sourceforge.jtds:jtds au lieu de
mysql:mysql-java-connector puis mettre à jour le numéro de version. Tous les
projets qui dépendent de persistence-deps utiliseront JTDS s'ils décident
d'utiliser la nouvelle version. La consolidation des dépendances est une bonne pratique qui permet de réduire la
taille des fichiers pom.xml qui ont un grand nombre de dépendances. Si vous devez
partager un grand nombre de dépendances entre plusieurs projets, vous pouvez aussi établir des relations
parent-enfant entre ceux-ci et extraire toutes les dépendances communes dans le projet parent. La limite de cette
approche parent-enfant est qu'un projet peut n'avoir qu'un seul parent. Parfois, il est donc plus simple de
regrouper ces dépendances et de référencer une dépendance de type pom. Ainsi, votre projet peut
référencer autant de POM de dépendance selon ses besoins.
Maven utilise le niveau d'une dépendance dans l'arbre lorsqu'il résout un conflit, ne retenant que la
dépendance la plus proche. Cette technique de regroupement de dépendances les fait descendre d'un niveau dans
l'arbre. Ne l'oubliez pas lorsque vous devez choisir entre regrouper des dépendances dans un fichier
pom.xml ou utiliser la balise dependencyManagement dans un
POM parent.