Avec Objis, spécialiste formation MAVEN (3j) et formation intégration continue (5j),
, maîtrisez la gestion des dépendances avec MAVEN. Confiez à MAVEN la recherche des jars nécessaire à votre projet. déclarez vos dépendances 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.
Liens utiles
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
Comprendre le plugin ‘dependency’
Programme
Partie 1 : dépendances couche Domaine, Dao et service
Partie 2 : déploiement de l’appli avec Jetty
Partie 3 : identifier les dépendances avec le plugin ‘dependency’
Partie 4 : optimisations
Partie 5 : versions des dependances
Durée
30min
PUBLICITE : votre formation ‘Intégration continue’ avec Objis
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
Dans ce Tutoriel , vous allez :
1) Mettre en oeuvre des dépendances entre modules d’un projet multimodules,
2) Déployer dans un serveur d’application à partir de Maven.
2) puis vous allez mettre en oeuvre une stratégie permettant lors du packaging du WAR d’embarquer les Jar du domaine, service et dao dans le Web-INFlib du WAR.
3) Apprendre un technique d’optimisation du pom.xml
Partie 1 : dépendances couches Domaine, DAO et Service
Dépendances couche Dao
Spécifiez que la couche DAO dépend de la couche Domaine (version 1.0-SNAPSHOT)
Configurez le projet monappli-dao de façon à utiliser hibernate Core 4.2 pour notre couche d’accès aux données.
Dépendances couche Service
Spécifiez que la couche Service dépend de la couche Dao (version 1.0-SNAPSHOT)
Dépendances couche web
Spécifiez que la couche Web dépend de la couche Service et de la couche Domaine (version 1.0-SNAPSHOT)
Packagez ensuite le livrable web
Expliquez le contenu du livrable. En particulier analysez le contenu du dossier WEB-INF\lib. Constatez que les 3 dépendances s’y trouvent
Partie 2 : déploiement de l’appli avec Jetty
Mettez en oeuvre pour le projet web le plugin Jetty à partir de la documentation du plugin (ch. Configuring HowTo et Running):
REMARQUE 1 : Tous les plugins ayant comme groupId org.apache.maven.plugins (ceux du projet maven) sont reconnus automatiquent car maven ajoute ce groupId par défaut quand il n’est pas spécifié. Expliquez d’où vient ce comportement.
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 ? Essayez de vous connecter sur http://localhost:8080
FACULTATIF : en utilisant la documentation du plugin Tomcat 7, déployez dans Tomcat sur le port 8082.
Partie 3 : identification des dépendances
Nous allons utiliser le plugin ‘dependency’ pour connaître les dépendances de notre projet
Que produisent les commandes suivantes sur le module web :
— mvn dependency:analyze (Analyse dépendances : utilisé, non utilisé, déclaré, non déclaré)
Expliquez
mvn dependency:resolve (lister toutes les dépendances)
mvn dependency:tree (arbre des dépendances)
Expliquez
AVOUS DE JOUER : que produisent les commandes suivantes sur le module web :
mvn dependency:resolve-plugins (lister les dépendances de plugin)
mvn dependency:tree -X (arbre des dépendances, mode debug)
Partie 4 : optimisations
Optimisation N°1 : dépendances module ‘enfant’ monappli-web
Le mécanisme d’héritage Maven permet d’écrire cette configuration :
Expliquez.
Qu’est ce qu’une propriété maven ? Comment créer une propriété maven pour votre projet ? quelle utilité ?
Qu’est ce qu’une proriété implicite ?
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 (pas la version). 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
Analysez l’impact sur le pom du module web
Expliquez
Elements optimisation]]
Partie 5 : versions des dépendances
Le plugin versions-maven-plugin est également utile pour travailler avec les versions de vos dépendances :
Que produisent les commandes suivantes :
mvn versions:display-dependency-updates (Liste toutes les dépendances ayant une version plus récente)
mvn versions:display-plugin-updates (Liste tous les plugins ayant une version plus récente
mvn versions:update-child-modules (changer d’abord la version du pom parent. En appelant ensuite ce goal sur le pom parent, il mettra à jour les versions dans enfants. pratique pour faire changements de versions)
mvn versions:set – Comme update-child-modules mais permettant de spécifier la nouvelle version en ligne de commande (-DnewVersion=VALUE) au lieu de changer le pom parent.
Conclusion
Dans ce tutoriel, vous avez mis en œuvre dépendances Maven.