Création d’un module

Introduction

Un module est un élément autonome qui a son propre cycle de vie. Maven utilise ce que l’on appelle le “reactor” pour orchestrer dans un projet l’appel des différents modules en fonction de leurs dépendances.

Caractéristiques d’un projet module :

  • Il permet d’exécuter un goal maven sur un ensemble de projet.
  • Les dépendances sont gérées et récupérées selon les nécessités.
  • Les modules enfants peuvent être déclarés dans n’importe quel ordre.
  • Par défaut une erreur dans l’un des modules arrête l’exécution de la tâche. Il est possible de modifier la configuration de certains plugins pour que le traitement se déroule jusqu’à la fin.
  • Les projets modules sont constitués d’un seul fichier pom.xml
    et peuvent donc hériter d’autres projets modules.
  • Il est possible de spécifier une gestion des configurations particulière, des dépendances particulières, des ressources particulières, des tests particuliers, une structure particulière… via le fichier pom.xml.

Comme les poms héritent leur configuration d’autres poms, vous devez toujours voir un pom Maven comme la combinaison du Super pom, plus tous les poms parents intermédiaires et enfin le pom du projet en cours. Maven commence par le Super pom et surcharge la configuration par défaut avec un ou plusieurs poms parents. Puis, il surcharge la configuration résultante avec les valeurs du pom du projet. Au final, vous obtenez un pom effectif qui est le résultat de la combinaison de plusieurs poms. (Voir ici).

De ce fait pour la création d’un projet module nous pouvons avoir des types d’organisations de poms différentes comme :

  • organisation 1 (l’héritage direct):

  • organisation 2 (l’héritage grâce à l’enrichissement du pom via l’ajout des informations contenues dans le pom.xml de l’artifact ciblé):


Dans les deux cas le pom enfant aura accès aux informations du pom parent.

Parent (le projet module)

Dans le fichier pom.xml du parent ou projet module, il faut déclarer les modules enfants :

...
<modules>
   <module>module1</module>
   <module>module2</module>
   <module>module3</module>
</modules>
...

Ainsi lorsqu’une action sera lancée sur le projet parent, elle le sera également sur les projets enfants.

Dans l’organisation 2, il faut mentionner le Super pom base :

...
 
	        <groupId>scub-foundation.base.superpom</groupId>
		<artifactId>scub-foundation-superpom-core-implementations</artifactId>
		<version>1.0-SNAPSHOT</version>
 
...

Enfants

Les enfants doivent eux aussi soit déclarer le parent dans leur pom.xml, soit déclarer le Super pom base (qui est un parent particulier).

Exemple avec le Super pom base (organisation 2) :

...
 
	        <groupId>scub-foundation.base.superpom</groupId>
		<artifactId>scub-foundation-superpom-core-implementations</artifactId>
		<version>1.0-SNAPSHOT</version>
 
...

Exemple avec un autre parent (organisation 1):

...
 
		<groupId>contact-manager</groupId>
		<artifactId>contact-manager-core-implementations</artifactId>
		<version>1.0-SNAPSHOT</version>
 
...

Création

File -> New -> Project…
Selectionnez Maven Project


Cliquez sur Next


Cliquez sur Next

Sélectionner l’archetype avec l’Artifact Id scub-foundation-archetype-core.

Cliquez sur Next

Cliquez sur finish

Remplir de la manière suivante :

  • Group Id: contact-manager
  • Artifact Id: contact-manager-module-apps
  • Version: 0.0.1-SNAPSHOT

Supprimez les librairies avec (Build Path->Remove from Build Path) puis supprimez les dossiers avec (delete). Le projet doit uniquement contenir le pom.xml.

Changer le pom.xml de la façon suivante :

4.0.0
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>contact-manager</groupId>
	<artifactId>contact-manager-module</artifactId>
	<packaging>pom</packaging>
	<version>1.0-SNAPSHOT</version>
	<scm><connection>scm:svn:http://sf.scub.net/svn/trunk/example/ContactManager/contact-manager-module</connection></scm>
   	<parent>
		<groupId>scub-foundation.base.superpom</groupId>
		<artifactId>scub-foundation-superpom-module</artifactId>
		<version>4.0</version>
	</parent>
 
	<modules>
		<module>../contact-manager-batch</module>
		<module>../contact-manager-ws-server</module>
		<module>../contact-manager-core-interfaces</module>
		<module>../contact-manager-core-implementations</module>
		<module>../contact-manager-ws-client-interface</module>
		<module>../contact-manager-ws-client</module>
		<module>../contact-manager-spring-mvc-client</module>
		<module>../contact-manager-client</module>
	</modules>
 
	<build>
		<plugins>
				<plugin>
			        <groupId>org.apache.maven.plugins</groupId>
			        <artifactId>maven-deploy-plugin</artifactId>
			        <configuration>
			        	<skip>true</skip>
			        </configuration>
				</plugin>
		</plugins>
	</build>
 
</project>

Cliquez sur le projet contact-manager-module-apps,
puis sur :

-> Deploy to jetty
Dans la console vous devez obtenir le résultat suivant :

Télécharger les sources

Les sources du projet Eclipse pour ce tutoriel sont téléchargeables sur Source Forge à l’adresse suivante.