À vous de jouer
Vous devez créer un nouveau projet Maven. Vous êtes libre de choisir le nom de votre projet et son sujet, mais vous devez respecter les consignes suivantes :
Votre projet doit être un projet multi-modules
Vous organiserez votre projet en vous appuyant sur une architecture multi-tiers telle que présentée dans le cours
Votre projet fourniera une application web et un jeu de batchs
Vous n'avez pas à développer l'application, seulement créer le projet Maven et quelques éléments pour pourvoir tester le résultat :
Une classe Main dans le module des batchs exécutée automatiquement au lancement du JAR
Une JSP et un fichier web.xml dans le module de l'application web
Au moins une classe de test unitaire (même avec un seul test passant toujours) dans chaque module
Pensez également à bien gérer les dépendances entre les modules et suivre les recommendations et bonnes pratiques vues tout au long du cours (gestion des dépendances, des plugins...).
Vous devez personnaliser le construction du votre projet Maven comme ceci :
Un JAR des sources de chaque module est généré automatiquement pendant la phase "package" si le profile "with-sources" est activé
Un JAR de la JavaDoc de chaque module est généré automatiquement pendant la phase "package"
Une archive (zip et/ou tar.gz) est généré automatiquement pendant la phase "package" du module des batchs, comprenant :
le JAR du module des batchs
les JAR de toutes les dépendances (scope compile et runtime)
Les modules batchs et application web contiennent un fichier
info.properties
contenant une propriétéapplication.version
remplie automatiquement par Maven avec la version de projet lors du build.Possibilité de générer un site web pour le projet avec au minimum :
une page de documentation de l'installation (le contenu n'est pas important, cela peut être un simple "Lorem ipsum...")
un rapport sur les dépendances du projet
un rapport sur l'exécution des tests agrégé au niveau projet parent et détaillé dans chaque modules
Vérifiez votre travail
Vérifiez que vous avez bien les éléments suivants :
Les fichiers POM (pom.xml) sont correctement indentés et suffisamment lisibles (saut de lignes, commentaires...)
Le projet Xxx est bien un projet Maven multi-modules comprennant les modules :
xxx-batch
xxx-business (ou xxx-metier)
xxx-consumer (ou xxx-persistance)
xxx-model (ou xxx-modele)
xxx-webapp (ou xxx-application-web)
xxx étant l'artifactId du projet parent
Chaque module a comme package de base :
xxx-batch : zzz.yyy.xxx.batch
xxx-business : zzz.yyy.xxx.business
xxx-consumer : zzz.yyy.xxx.consumer
xxx-model : zzz.yyy.xxx.model
xxx-webapp : zzz.yyy.xxx.webapp
xxx étant l'artifactId du projet parent
zzz.yyy étant le groupId du projet parentLe POM parent contient la définition suivante :
<project> ... <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-javadoc-plugin</artifactId> <configuration> ... </configuration> <executions> <execution> <id>javadoc-jar</id> <phase>package</phase> <goals> <goal>jar</goal> </goals> </execution> </executions> </plugin> </plugins> ... </build> ... </project>
Le POM parent contient la définition suivante :
<project> ... <profiles> <profile> <id>with-sources</id> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-source-plugin</artifactId> <configuration> ... </configuration> <executions> <execution> <id>source-jar</id> <phase>package</phase> <goals> <goal>jar</goal> </goals> </execution> </executions> </plugin> </plugins> ... </build> </profile> </profiles> ... </project>
La section
<executions>
n'est pas obligatoire car par défaut, le goalsource-jar
est câblé sur la phasepackage
.La section <dependencies> de chaque module comprend bien les dépendances vers les autres modules telles que :
batch --> {model, business}
business --> {model, consumer}
consumer --> {model}
model --> {}
webapp --> {model, business}
Les dépendances vers les bibliothèques tierces mais aussi les modules.
Tous les plugins utilisés dans les sections build du projet sont listés dans la section
<dependancyManagement>
du POM parent, avec au minimum le groupId, l'artifactId et la version.