Architecture en 3-POM avec Maven

maven-logo-black-on-white

Maven est un projet de la fondation Apache. Il s’agit d’un outil de gestion des dépendances et de cycles de vie d’un projet (du développement à la production du livrable). Il est principalement utilisé dans le cadre de développement des projets Java, mais peux être utilisé dans d’autres contextes.

Maven permet de découper un projet en plusieurs modules. Chaque module est un élément autonome qui a son propre cycle de vie. Maven utilise un réacteur pour orchestrer l’appel des différents modules en fonction de leurs dépendances.

Le concept de module permet d’affiner la granularité des livrables suivant les concepts forte cohésion et faible couplage. Ces concepts, en fonction de la taille du projet, font en sorte que l’on a plus ou moins de modules. L’intérêt de l’architecture en 3-POM prend toute sont importance dans ce cas précis. Elle rend possible la compilation, les tests et la livraison des modules indépendamment les uns des autres.

L’architecture en 3-POM se résume en trois concepts :

  • Le réacteur
  • Le module parent
  • Les modules applicatifs

Le réacteur

Comme dit précédemment, le réacteur permet d’orchestrer l’appel des modules en fonction de leurs dépendances. Il faut déclarer les modules dans l’ordre dont ils dépendent les uns des autres.

Le réacteur offre des fonctionnalités permettant de contrôler finement les modules sur lesquels on souhaite faire un traitement.

Pour illustrer le concept du réacteur, prenons l’exemple simple d’un projet des modules : moduleA, moduleB, moduleC et moduleD. Dans cet exemple les modules ont les dépendances suivantes :

  • moduleD dépend du moduleC.
  • moduleC dépend du moduleB.
  • moduleB dépend du moduleA.

L'arborescence du projet est comme suit:

maven-arch-3pom-001

Le fichier pom.xml contient la déclaration des modules comme suit:

maven-arch-3pom-002

Voici quelques commandes utiles:

  • Pour construire un module ou une liste des modules particuliers, on utilise l’option “-pl” ou “--projects”.
  • Pour construire les modules impactant la construction d’un module ou une liste de module, on ajoute à la commande précédente “-am” ou “--also-make”.
  • Pour construire tous les modules impactés par la construction d’une liste de module, on utilise l’option “-amd” ou “--also-make-dependents”.
  • Pour reprendre la construction à partir de n’importe où, on utilise l’option “-rf” ou “--resume-from”.

Plus d’information, à cette adresse: https://maven.apache.org/guides/mini/guide-multiple-modules.html

Le module parent

Dans un projet multi-modules, le module parent permet de centraliser la gestion de dépendances des modules du projet. L’objectif est de garantir une cohérence des versions des dépendances requises (internes ou externes) afin d’éviter des conflits au niveau de la solution finale (livraison). Ce module n’effectue pas de construction.

Pour illustrer, ci-dessous un exemple de déclaration des dépendances dans le pom.xml du module parent :

maven-arch-3pom-003

Le module applicatif

Les modules applicatifs suivent le modèle d’un projet maven hormis qu’ils dépendent d’un projet parent. La dépendance au projet parent doit contenir obligatoirement le chemin relatif vers le module parent.

La déclaration des dépendances (internes ou externes) du module ne doit pas contenir de numéro de version (les versions sont gérées par le module parent).

Un exemple de déclaration de dépendance au parent est :

maven-arch-3pom-004

Schéma d’architecture en 3-POM

maven-arch-3pom-005

 

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Captcha *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.