Maîtrisez la gestion des dépendances avec MAVEN. Confiez à MAVEN la recherche des jars necessaires à votre projet. déclarez vos dépendences dans la section ’dependencies’ du fichier pom.xml . Optimisez la déclaration des dépendances inter-modules en utilisant l’héritage ainsi que la balise ’dependencyManagement’. Comprenez enfin le plugin maven ’dependency’
Ce tutoriel est un extrait de séances pratiques de la formation MAVEN dispensée par Objis.
Les + objis
70% de travaux pratiques
Clé USB avec tous les outils utilisés + Corrigés TPs
Bilan pédagogique individuel + conseils
Nos tutoriaux pour vous initier
Tutoriaux et formation MAVEN
Page officielle des plugins Maven
Guide développement de plugin Maven
Guide configuration de plugin Maven
Page officielle sur les dépendances MAVEN
Tutoriel Maven N°1 : Installation Maven
Comprendre la gestion dépendances d’un projet multi-modules
Comprendre les déclaration de dépendances
contexte
Partie 1 : ajout dépendances module web
Partie 2 : création, configuration et compilation servlet
Partie 3 : déploiement de l’appli avec Jetty
Partie 4 : dépendances couche DAO et service
Partie 5 : plugin dependency
Partie 6 : dépendances inter modules
30min
Vous souhaitez déléguer à Maven la gestion des dépendances de votre projet multi-modules ’monappli’ impliquant 4 modules :
monappli-dao
monappli-service
monappli-domaine
monappli-web
En particulier, vous souhaitez ajouter les dépendances nécessaire pour coder votre couche web (ici implémentation Servlet), votre couche Service (ici implémentation Spring), et votre couche d’accès aux données (ici implémentation Hibernate).
Enfin vous souhaitez déclarer les dépendances entre les modules.
Nous allons implémenter notre couche web avec une simple servlet. Nous allons avoir besoin des classes HttpServletRequest et HttpServletResponse. Comment les trouver ?
Ajout dépendances J2EE
INFO : necessaire pour travailler avec les servlet – Les dépendances de l’API J2EE de Sun (JNDI, JCA, JTA...) sont propriétaires (acceptation de la licence SUN necessaires. Redistribution non permise avec licence SUN...) et ne sont pas accessibles via Maven.
INFO 2 : par contre les dépendances de l’implémentation J2EE du serveur d’application Apache GERONIMO sont disponibles (Licence Apache 2 : distribution libre des sources et binaires).
Donc plus besoin de télécharger les JARs .
Il suffit de connaître les coordonnées Maven
groupId
artifactId
version
Ajout dépendances pour création de servlets
ICI : présentation de l’artifact geronimo-servlet_2.5_spec sur mvnrepository.com :

REMARQUE : le scope ’provided’ informe MAVEN que le jar est fourni par le conteneur web. Il ne faudra donc pas l’inclure dans la livraison WAR
Ajout dépendances pour création de pages JSP
Ajoutez dépendance pour création de JSP 2.0

Vous pouvez désormais coder des JSP et Servlets sur votre projet, sans à vous soucier de la récupération de tel ou tel autre jar (ex:servlet-api de tomcat...)
3 étapes :
créer servlet HelloServlet
configurer la servlet dans web.xml
déployer la servlet
Etape 1 : création servlet
$ mkdir src\main\java\com\objis\demomaven\web
$ cd src\main\java\com\objis\demomaven\web
Etape 2 : configuration servlet

A partir du répertoire monappli-web :
$ mvn compile

REMARQUE : sans l’ajout des dépendances J2EE, le résultat de la compilation seraitt :

Mettez en oeuvre pour le projet web le plugin Jetty à partir de la documentation du plugin :
REMARQUE 1 : Tous les plugins ayant comme groupId org.apache.maven.plugins (ceux du projet maven) sont reconnus automatiquent car maven ajoute le groupId par défaut quand il n’est pas spécifié.
REMARQUE 2 : Pour les autres projet, maven ne peux deviner leur groupId (org.mortbay.jetty pour le plugin maven-jetty-plugin). Mais on peux quand même le lancer depuis la ligne de commande sans l’ajouter au pom comme ceci : mvn org.mortbay.jetty:maven-jetty-plugin:run
Ainsi , déclarer le plugin dans le pom, permet de simplifier la commande. Après installation du plugin lancez la commande : mvn jetty:run
Que se passe t’il ?
Ajout de dépendances Log4j
A l’aide du site http://www.mvnrepository.com , ajoutez dans le fichier pom.xml du projet monappli-web le code XML associé à une dépendence de l’application à la version 1.2.4 de log4j
Lancez la commande mvn install
Que se passe t’il ?
Mise en oeuvre applicative de Log4j
créeez le répertoire src/main/resources
créer dans ce répertoire un fichier texte log4j.properties.
Dans le code de la servlet, ajoutez les 3 lignes de code minimales permettant de faire apparaître un log Log4j
— Etape 1 : Import de la classe Logger de log4j
— Etape 2 : Création d’une variable privée statique
— Etape 3 : Log de message, niveau INFO
Mettez en evidence l’utilisation de Log4j dans les logs de Jetty.
Dépendances couche Service
Configurez le projet monappli-service de façon à utiliser Spring 2.5.6 pour la couche Service
Dépendances couche Dao
Configurez le projet monappli-dao de façon à utiliser hibernate Core 3.3.2.GA pour notre couche d’accès aux données.
En cas de Problème
REMARQUE : il se peut qu’un problème de dépendance avec JTA apparaisse (required artifacts missing : javax.transaction:jta:jar:1.0.1B)
La cause de ce problème est l’incompatibilité de JTA (propriétaire) avec le dépôt Maven (Open Source).
SOLUTION : Télécharger manuellement JTA sur le site de Sun : JTA
Une fois le fichier, par exemple jta-1_0_1B-classes.zip, téléchargé, il est nécessaire de l’ajouter dans le dépôt local via la commande :
mvn install:install-file -Dfile=’chemin vers le fichier téléchargé’ -DgroupId=javax.transaction -DartifactId=jta -Dversion=’version du jar téléchargé’ -Dpackaging=jar INFO : ’version du jar téléchargé’ correspondra à la version du jar téléchargé, dans le cas de jta-1_0_1B-classes.zip, la version est 1.0.1B
Nous allons utiliser le plugin ’dependency’ pour connaître les dépendances de notre projet
Que produisent les commandes suivantes :
mvn dependency:analyze (Analyse dépendances : utilisé, non utilisé, déclaré, non déclaré)
mvn dependency:analyze-duplicate (Analyse duplication dépendances)
mvn dependency:resolve (lister toutes les dépendances)
mvn dependency:resolve-plugin (lister les dépendances de plugin)
mvn dependency:tree (arbre des dépendances)
mvn dependency:tree (arbre des dépendances)
mvn dependency:tree -X (arbre des dépendances, mode debug)
Déclarez une dépendance liant la couche dao à la couche domaine.
Déclarez une dépendance liant la couche service à la couche dao.
Déclarez une dépendance liant la couche web à la couche service.
ANALYSE :
Expliquez le résultat de la commande : mvn dependency:analyze . Quelle conclusion ?
Optimisation N°1 : propriétés
Le mécanisme d’héritage Maven permet d’écrire cette configuration :

Expliquez.
A l’aide de la documentation Maven, citez 5 autres variables implicites
Optimisation N°2 : dependencyManagement
INFO : Si le projet ’monappli-parent’ utilise
— Bénéfice 1 : les détails de dépendance peuvent être centralisé dans un endroit qui sera propagé dans les POMs hérités.
— Bénéfice 2 : la version et le scope des artifacts impliqués dans les dépendances transitives peuvent aussi être controlés en les spécifiant dans la section
Expliquez la configuration suivante du pom parent

Analysez l’impact sur le pom du module web

Expliquez
Dans ce tutoriel, vous avez mis en oeuvre dépendances Maven.
Le chemin le plus court pour avoir les réflexes et la méthodologie du bon développeur et chef de projet MAVEN :
Si vous appréciez notre sens du partage, devenez gratuitement membre ’classic’ du Club Objis :
Votez pour les prochains tutoriaux à publier
Préparez vos entretiens techniques
Valorisez votre profil / expertise
Identifiez des opportunités d’emploi
Recevez la newsletter objis.com