Ce site met a disposition le build journalier de la traduction francaise du Maven: The Definitive Guide
Consultez :
  • Les documents de reference sur le projet original
  • Les sources de la traduction fr sur GitHub
  • maven


    9.6. Les bonnes pratiques du POM

    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.

    9.6.1. Regrouper les dépendances

    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 9.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 9.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.

    Note

    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.