vers l'accueil formulaire de contact

Tutoriel Maven N°6 : dépendances

Votre formation MAVEN avec Objis, spécialiste formation java depuis 2005Maî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

Liens utiles

- 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

Prérequis, outils et versions

- Tutoriel Maven N°1 : Installation Maven

Objectifs

- Comprendre la gestion dépendances d’un projet multi-modules
- Comprendre les déclaration de dépendances

Programme

- 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

Durée

- 30min

Contexte

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.

Partie 1 : ajout dépendances module web

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 :

PNG - 3.6 ko
tutoriel-maven-dependences-2

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

PNG - 3 ko
tutoriel-maven-dependences-3

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...)

Partie 2 : création et déploiement d’une servlet simple

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

Zip - 438 octets
HelloServlet

Etape 2 : configuration servlet

PNG - 11.7 ko
tutoriel-maven-dependences-1
XML - 469 octets
web.xml

A partir du répertoire monappli-web :

$ mvn compile

PNG - 14.5 ko
tutoriel-maven-dependences-1ter

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

PNG - 48.1 ko
tutoriel-maven-dependences-1bis

Partie 3 : déploiement de l’appli avec Jetty

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.

Zip - 347 octets
log4j

- 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.

Partie 4 : dépendances couches DAO et Service

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 :

Zip - 8.6 ko
jta-1_0_1B-classes

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

Partie 5 : identification des dépendances

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)

Partie 6 : dépendances inter modules

- 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 :

PNG - 17.3 ko
tutoriel-maven-dependences-4

- Expliquez.

- A l’aide de la documentation Maven, citez 5 autres variables implicites

Optimisation N°2 : dependencyManagement

INFO : Si le projet ’monappli-parent’ utilise pour définir une dépendance à junit:junit:4.4 , alors les POMs héritant du parent peuvent définir leur dépendance en fournissant uniquement groupId=junit et artifactId=junit . Maven trouvera remplir la version en utilisant la version du parent.

— 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

PNG - 23.7 ko
tutoriel-maven-dependences-5

- Analysez l’impact sur le pom du module web

PNG - 14.9 ko
tutoriel-maven-dependences-6

- Expliquez

Conclusion

Dans ce tutoriel, vous avez mis en oeuvre dépendances Maven.

Formation MAVEN

Le chemin le plus court pour avoir les réflexes et la méthodologie du bon développeur et chef de projet MAVEN :

Votre formation MAVEN avec Objis, spécialiste formation java depuis 2005

Pour aller plus loin : le réseau Objis

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