Avec Objis, spécialiste formation MAVEN (3j) et formation intégration continue (5j),
, maîtrisez la création d’un projet multi module avec maven. Identifiez les différents modules de l’application. Générez le pom.xml du projet parent ainsi que le pom.xml des modules. Comprenez les concepts de composition et d’héritage. Enfin optimisez les pom.xml
Liens utiles
Projet multi-modules Maven (page officielle)
Multi-module sur le Maven book
Prérequis, outils et versions
Tutoriel Maven N°1 : Installation Maven
Objectifs
Comprendre la création d’un projet multi-modules maven
Comprendre les dépendances entre modules
Comprendre les concepts clés : composition et héritage
Programme
Contexte et architecture projet
Partie 1 : création projet parent
Partie 2 : création des modules
Partie 3 : compilation du parent
Durée
30min
PUBLICITE : votre formation ‘Intégration continue’ avec Objis
Contexte
Vous avez en charge un projet ‘monappli’ impliquant 4 modules :
– monappli-dao
– monappli-service
– monappli-domaine
– monappli-web
Partie 1 : création projet parent
A partir d’un nouveau répertoire TP3 (vide), créez projet parent (version 1.0-SNAPSHOT) de type ‘quickstart‘ (Pour le mode quickstart tapez [Entrée] à chaque question posée):
mvn archetype:generate -DgroupId=com.objis.demomaven -DartifactId=monappli
dans le répertoire ‘monappli’ généré :
— supprimez le répertoire src
— modifiez en ‘pom’ le contenu de la balise packaging , initialement à ‘jar’
Ainsi le pom initial suivant :
devient :
ça y est : vous venez de créer un ‘projet parent’ ! BRAVO !
Reste à créer les modules dans la partie suivante. Cela nous permettra de toucher du doigt deux techniques clés caractéristique des projets multimodule Maven : la composition (le parent déclare ses modules) et l’héritage (l’enfant déclare son parent). Ces techniques se traduisent par des sections précises dans le pom.xml
Partie 2 : création des modules
Objectif : créer pour chacun des livrables service, domain, dao un JAR
Couche domaine
À partir du répertoire ‘monappli’ du projet parent, lancez en mode quickstart :
mvn archetype:generate -DgroupId=com.objis.demomaven -DartifactId=monappli-domaine
Analysez le contenu du pom.xml du module
Expliquez
QUESTION : quel impact sur le pom parent ?
Expliquez
Couche service
À partir du répertoire ‘monappli’ du projet parent, lancez en mode quickstart :
mvn archetype:generate -DgroupId=com.objis.demomaven -DartifactId=monappli-service
QUESTION : quel impact sur le pom parent ?
Couche dao
À partir du répertoire ‘monappli’ du projet parent, lancez en mode quickstart :
mvn archetype:generate -DgroupId=com.objis.demomaven -DartifactId=monappli-dao
QUESTION : quel impact sur le pom parent ?
Couche web
Pour le projet web créez un projet de type war
mvn archetype:generate -DgroupId=com.objis.demomaven -DartifactId=monappli-web
Choisissez le type de projet maven-archetype-webapp (pour trouver le numero faire clique droit + Rechercher… dans la Console)
Analysez ensuite arborescence du projet global :
Partie 3 : compilation du parent
A partir du répertoire du projet parent lancez : mvn compile
Expliquez le résultat. En particulier, expliquez le lien entre l’ordre de déclaration des modules dans le pom.xml parent et l’ordre de compilation des modules.
QUESTION : qu’appelle t’on la ‘composition’ (ou Aggregation) dans MAVEN ? Quelle valeur ajoutée ?
Partie 4 : livraison war
L’objectif du projet est la livraison d’une application web (WAR) contenant :
— le jar du module domaine
— le jar du module service
— le jar du module dao
Lancez à partir du projet parent : mvn package
Analysez le contenu du fichier war généré , en particulier WEB-INF/lib
Contient’il les jars des autres modules ? Pourquoi ?
<doc5123|center>
QUESTION : comment obtenir le résultat attendu : un war contenant dans répertoire WEB-INFlib les jars de la couche domaine, de la couche dao et de la couche service. C’est ce que vous apprendrez au prochain TP : gestion des dépendances
CORRECTION
Conclusion
Dans ce tutoriel, vous avez mis en oeuvre un projet multi modules Maven. Dans le prochain tutoriel, vous allez apprendre à gérer les dépendances entre modules.