Utiliser Maven 2 - par Matthieu Lux (Tous les articles)

Utiliser Maven 2 - par Matthieu Lux (Tous les articles)

Utiliser Maven 2 - par Matthieu Lux (Tous les articles)

Utiliser Maven 2 par Matthieu Lux (Tous les articles) Date de publication : 01/09/2008 La présente documentation propose un tour d'horizon de Maven 2 en s'appuyant largement sur la documentation officielle. Le document fait référence à beaucoup de notions et de références qui pourront évidemment évoluer dans le temps.

Utiliser Maven 2 - par Matthieu Lux (Tous les articles)

Utiliser Maven 2 par Matthieu Lux (Tous les articles) - 2 - Les sources présentés sur cette pages sont libre de droits, et vous pouvez les utiliser à votre convenance. Par contre cette page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs.

Copyright Matthieu Lux . Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérets. http://matthieu-lux.developpez.com/java/maven/ 1 - La théorie de Maven . 4 1.1 - Philosophie . . 4 1.2 - Installation et fonctionnement . 4 1.3 - Apport de Maven . . 5 2 - Organisation des fichiers . . 6 3 - Cycle de vie et goal Maven . 8 3.1 - Goals Maven . . 8 3.1.1 - Définition . 8 3.1.2 - Localisation des goals .

8 3.2 - Cycle de vie et goals . 9 4 - Gestion des plugins Maven . . 12 4.1 - Dans Maven, tout est plugin . . 12 4.2 - Cartographie . . 12 4.2.1 - Core . 12 4.2.2 - Packaging . 12 4.2.3 - Outils . . 12 4.2.4 - Reporting . . 12 4.2.5 - IDE . 13 4.2.6 - Tous les plugins . . 13 4.3 - Configurer les plugins . 13 5 - Repository Maven . . 15 5.1 - Définition d'un artifact . . 15 5.2 - Repository Maven 2 . . 15 5.3 - Configurer des repositories . . 16 6 - Gestion des dépendances du projet . 18 6.1 - Dépendances du projet . . 18 6.2 - Gestion précise des dépendances . . 20 6.2.1 - Dépendances transitives .

. 20 6.2.2 - Exclusions . 21 6.3 - Installation du projet . . 23 6.4 - Ajouter un jar dans un repository . 23 6.5 - Proxy d'entreprise . 24 7 - Ressources et filtrage . . 25 7.1 - Ressources . . 25 7.2 - Filtrage . . 25 7.3 - Stratégies et risques du filtrage . . 26 7.4 - Stratégie de sélection des ressources . . 26 8 - Packaging . 29 9 - Intégration avec Eclipse . 30 9.1 - External builder . 30 9.1.1 - Avantages . 31 9.1.2 - Inconvénients . 31 9.2 - m2Eclipse plugin . 32 9.2.1 - Avantages . 33 9.2.2 - Inconvénient . . 33 9.3 - q4e . . 33 9.3.1 - Avantages . 33 9.3.2 - Inconvénient . . 33 10 - Intégration avec Tomcat .

. 34 10.1 - Dans src/main/webapp : war:inplace . . 34 10.1.1 - Avantages . 34 10.1.2 - Inconvénients . 34 10.2 - Dans target/ : war:exploded . . 34 10.2.1 . .

10.2.2 . . 11 - Configuration du site . 36 11.1 - Structure . . 36 11.2 - Contenu . . 37

Utiliser Maven 2 - par Matthieu Lux (Tous les articles)

Utiliser Maven 2 par Matthieu Lux (Tous les articles) - 3 - Les sources présentés sur cette pages sont libre de droits, et vous pouvez les utiliser à votre convenance. Par contre cette page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright Matthieu Lux . Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur.

Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérets. http://matthieu-lux.developpez.com/java/maven/ 11.3 - Rapports . . 37 12 - Héritage de pom . . 42 13 - Intégration continue . 43 13.1 - Principes . . 43 13.2 - Bénéfices . . 43 13.3 - Intégration continue avec Maven . . 43 14 - Projets modulaires . . 44 14.1 - Définition . . 44 14.2 - Utilisation . . 44 14.3 - Intérêts et développements . 45 15 - Archetypes . . 46 15.1 - Utiliser un Archetype Maven . . 46 15.2 - Créer un Archetype Maven . . 48 16 - Conclusion . 49 16.1 - Références . 49 16.2 - Remerciements .

49

Utiliser Maven 2 - par Matthieu Lux (Tous les articles)

Utiliser Maven 2 par Matthieu Lux (Tous les articles) - 4 - Les sources présentés sur cette pages sont libre de droits, et vous pouvez les utiliser à votre convenance. Par contre cette page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright Matthieu Lux . Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérets. http://matthieu-lux.developpez.com/java/maven/ 1 - La théorie de Maven 1.1 - Philosophie Le Makefile ou Ant réalisent la compilation d'un projet via la réalisation de scripts pour les différentes étapes de la vie du projet.

Même avec les directives très abouties de Ant, le script redéfinit pour chaque projet des directives telles que : "compiler les fichiers sources du répertoire src dans le répertoire classes". Maven propose de renverser le problème. Ce ne sont plus les opérations à faire qui sont définit mais le projet qui est décrit. En sachant où se trouvent les éléments dont il a besoin dans le projet, il est à même de réaliser les opérations dessus. On n'écrit plus de script avec Maven.

Maven propose une configuration par défaut très complète qui permet une standardisation de la structure des projets Java. Au besoin, Maven permet de surcharger les configurations pour s'adapter à plus de situations. La philosophie de Maven Maven 1 était encore mixte dans le passage entre le scripting de tache et la description du projet. Il proposait à la fois la description du projet et la création de script. Maven 2 est plus strict et ne passe plus que par la description du projet. Maven 1 n'est plus supporté et il est conseillé de migrer les anciens projets sur Maven 2. La procédure est facilitée par un plugin Maven 2 dédié.

Ce document traite exclusivement de Maven 2. 1.2 - Installation et fonctionnement Installation : le plus simple est encore de suivre la procédure officielle Télécharger Maven . Il faut surtout retenir que plusieurs variables d'environnement sont à positionner : JAVA_HOME si ce n'est pas déjà fait, M2_HOME et ajouter le répertoire bin de Maven dans le PATH afin de pouvoir utiliser les commandes Maven. Utilisation : Se positionner en ligne de commandes dans le répertoire du projet. Avec la commande mvn et les goals décrits plus bas, il est alors possible de réaliser toutes les opérations nécessaires sur le projet.

Un projet qui utilise Maven contient simplement un fichier pom.xml qui représente la description du projet pour Maven. Toutes les informations pour le projet sont à renseigner dans ce fichier.

Alors qu'un fichier build.xml de Ant décrit entièrement la procédure pour réaliser une opération technique, le fichier pom.xml décrit le projet et suffit pour que Maven sache le manipuler. POM est l'acronyme de Project Object Model . Il s'agit donc d'un fichier XML qui a pour but de définir tous les éléments relatifs à un projet au sens large.

Utiliser Maven 2 par Matthieu Lux (Tous les articles) - 5 - Les sources présentés sur cette pages sont libre de droits, et vous pouvez les utiliser à votre convenance. Par contre cette page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs.

Copyright Matthieu Lux . Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérets. http://matthieu-lux.developpez.com/java/maven/ Les bases du pom.xml Les références du POM Le modèle complet du POM Un projet est un artifact dans Maven, il s'agit de la brique de base que manipule Maven. Pour démarrer un pom, il faut au moins définir l'identification de l'artifact du projet. La définition complète d'un artifact est donnée plus loin.

Le fichier pom.xml minimaliste ressemblera donc à ceci : Le premier pom.xml 4.0.0 com.developpez cours-maven-example jar Projet d'exemple pour le cours Maven 1.0 1.3 - Apport de Maven Grâce à la définition du projet dans le pom.xml, Maven 2 est capable de gérer toute la vie du projet. Il traite de la compilation mais aussi de packaging de l'application (faire une archive War ou Ear n'est pas toujours évident), la gestion des dépendances, la génération des rapports de suivis des développements (checkstyles, test unitaires...) et même le déploiement de l'application sur un environnement d'exécution.

Généralisé sur une grande majorité des projets Java Open Source (Spring, Hibernate, Struts , Maven 2 uniformise ainsi la gestion d'un projet Java et offre la possibilité d'utiliser des outils qui permettent l'industrialisation du développement via la génération automatique de rapports ou des systèmes d'intégration continue.

Utiliser Maven 2 par Matthieu Lux (Tous les articles) - 6 - Les sources présentés sur cette pages sont libre de droits, et vous pouvez les utiliser à votre convenance. Par contre cette page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright Matthieu Lux . Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérets. http://matthieu-lux.developpez.com/java/maven/ 2 - Organisation des fichiers Maven propose une structure de fichier complète.

Il s'agit de la configuration par défaut mais elle est surchargeable. Le principe général est de limiter le répertoire racine du projet à trois éléments : le fichier de description du projet pom.xml , le répertoire src qui contient uniquement les sources du projet et le répertoire target qui contient tous les éléments créé par Maven.

Structure des répertoires src/main/java Contient les sources Java de l'application src/main/resources Contient les ressources de l'application src/main/webapp Contient les fichiers de l'application Web src/test/java Contient les sources Java pour les tests unitaires src/test/resources Contient les ressources pour les tests unitaires src/site Contient les fichiers pour le site target Répertoire de destination de tous les traitements Maven La structure des fichiers par défaut Le tableau ci-dessus ne présente que les répertoires les plus courants. Aucun de ces répertoires n'est indispensable il est tout à fait possible de ne créer, par exemple, que le répertoire src/main/java pour commencer un projet.

Faut-il tout configurer ou laisser les valeurs par défaut ?

Laisser la configuration par défaut apporte la standardisation des projets. Cela peut s'avérer très important. Le passage d'une grande majorité des projets Java à Maven 2 apporte une grande lisibilité. Quelque soit le framework (par exemple Spring ou Hibernate), si on en consulte les sources, on trouve le code Java dans src/main/java, les tests unitaires dans src/test/java etc.. Si on a téléchargé les sources, on pourra même compiler ou packager le projet avec des commandes Maven.

En apportant une première classe Java au projet défini avec le pom.xml créé précédemment, la structure du projet ressemble alors à ceci : Structure des fichiers pour le projet +- cours-maven-example/ +- src +- main +- java +- Test.java +- pom.xml Il est alors déjà possible d'utiliser Maven pour compiler les sources du projet.

Il faut pour cela utiliser la commande mvn compile (en se positionnant dans le répertoire du projet). Le résultat sera le suivant : Exécution de maven pour la compilation ~/cours-maven-example$ mvn compile [INFO] Scanning for projects... [INFO - -

Utiliser Maven 2 par Matthieu Lux (Tous les articles) - 7 - Les sources présentés sur cette pages sont libre de droits, et vous pouvez les utiliser à votre convenance. Par contre cette page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright Matthieu Lux . Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérets. http://matthieu-lux.developpez.com/java/maven/ Exécution de maven pour la compilation [INFO] Building Projet d'exemple pour le cours Maven [INFO] task-segment: [compile] [INFO - - [INFO] [resources:resources] [INFO] Using default encoding to copy filtered resources.

[INFO] [compiler:compile] [INFO] Compiling 1 source file to ~\cours-maven-example\target\classes [INFO - - [INFO] BUILD SUCCESSFUL [INFO - - [INFO] Total time: 3 seconds [INFO] Finished at: Tue Aug 12 11:38:35 CEST 2008 [INFO] Final Memory: 2M/9M [INFO - - Architecture des fichiers du projet +- cours-maven-example/ +- src +- main +- java +- Test.java +- target +- classes +- Test.class +- pom.xml

Utiliser Maven 2 par Matthieu Lux (Tous les articles) - 8 - Les sources présentés sur cette pages sont libre de droits, et vous pouvez les utiliser à votre convenance. Par contre cette page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright Matthieu Lux . Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérets. http://matthieu-lux.developpez.com/java/maven/ 3 - Cycle de vie et goal Maven Maven a pour objectif de gérer tout le cycle de vie de l'application.

Il définit pour cela une liste d'étapes ordonnées qui sont pour lui le cycle de vie par défaut d'un projet. Chaque type de projets (jar, war...) pourra associer des actions différentes pour chaque étape.

Le cycle de vie par défaut définit les étapes suivantes : • validate Valide que le projet est correctement défini • compile Compile les sources • test Lance les tests unitaires • package Prépare la distribution du projet. (archives Jar, War, Ear...) • integration-test Lance les tests d'intégration • verify Lance des tests de validation du package créé. • install Installe le package en local sur la machine pour pouvoir être réutilisé comme dépendance. • deploy Déploie le package sur un serveur pour qu'il puisse être réutilisé par tout le monde. Le cycle de vie Maven gère des concepts qui ne le limitent pas à la manipulation de projets Java.

Il existe des plugins Maven dédié au support d'autres technologies que le Java. C'est le cas notamment de PHP , .net , Ruby , Flex 3.1 - Goals Maven 3.1.1 - Définition On fournit à Maven 2 une liste de goals à exécuter. Un goal est une tâche précise que Maven est en mesure de réaliser à partir des informations qu'il pourra trouver dans le fichier pom.xml.

A partir de la compréhension qu'il a du projet, il est capable d'exécuter énormément d'opérations dessus, chaque opération correspondant à un goal. Pour lancer un goal Maven sur un projet, il faut se placer à la racine du projet et exécuter la commande : mvn Il est possible d'enchaîner deux ou plusieurs goals avec la commande : mvn 3.1.2 - Localisation des goals Tous les goals se trouvent dans des plugins Maven. Pour exécuter un goal, Maven va donc commencer par résoudre le nom du goal pour en déduire le plugin dans lequel il se trouve et le télécharger. Tous les goals maven s'écrivent de la façon suivante :

Utiliser Maven 2 par Matthieu Lux (Tous les articles) - 9 - Les sources présentés sur cette pages sont libre de droits, et vous pouvez les utiliser à votre convenance. Par contre cette page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright Matthieu Lux . Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérets. http://matthieu-lux.developpez.com/java/maven/ : Dans notre projet précédemment créé, on peut lancer le goal compile du plugin compiler : Exécution explicit du goal compiler:compile ~/cours-maven-example$ mvn compiler:compile [INFO] Scanning for projects...

[INFO] Searching repository for plugin with prefix: 'compiler'. [INFO - - [INFO] Building Projet d'exemple pour le cours Maven [INFO] task-segment: [compiler:compile] [INFO - - [INFO] [compiler:compile] [INFO] Compiling 1 source file to ~\cours-maven-example\target\classes [INFO - - [INFO] BUILD SUCCESSFUL [INFO - - [INFO] Total time: 2 seconds [INFO] Finished at: Tue Aug 12 14:33:40 CEST 2008 [INFO] Final Memory: 2M/5M [INFO - - 3.2 - Cycle de vie et goals Chaque type de projet définit un ou plusieurs goals par défaut associés aux étapes du cycle de vie. Maven gère alors la progression dans le cycle de vie.

Lors du traitement d'un goal associé à une étape du cycle de vie, Maven lancera tous les goals associés aux étapes précédentes.

Il est possible de lancer la commande mvn avec comme paramètre une étape du cycle de vie. mvn Maven exécute alors dans l'ordre tous les goals correspondants à chaque étape du cycle précédent celle qui a été demandée. C'est ce mécanisme qui permet d'utiliser des commandes tu type : mvn compile ou mvn install Ce ne sont pas des noms de goal mais des noms d'étapes du cycle de vie. Des goals Maven y sont associés : compiler:compile pour le cycle compile, et war:war qui est exécuté pour un install dans un projet de type war (après avoir parcouru les étapes précédente dans le cycle de vie).

Utiliser Maven 2 par Matthieu Lux (Tous les articles) - 10 - Les sources présentés sur cette pages sont libre de droits, et vous pouvez les utiliser à votre convenance.

Par contre cette page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright Matthieu Lux . Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérets. http://matthieu-lux.developpez.com/java/maven/ Si on utilise une partie importante du cycle de vie par défaut d'un projet Jar, on peut identifier la liste des goals que Maven utilise : [resources:resources], [compiler:compile], [compiler:testCompile], [surefire:test], [jar:jar], [install:install] Exécution avec une étape avancée du cycle de vie ~/cours-maven-example$ mvn install [INFO] Scanning for projects...

[INFO - - [INFO] Building Projet d'exemple pour le cours Maven [INFO] task-segment: [install] [INFO - - [INFO] [resources:resources] [INFO] Using default encoding to copy filtered resources. [INFO] [compiler:compile] [INFO] Compiling 1 source file to ~\cours-maven-example\target\classes [INFO] [resources:testResources] [INFO] Using default encoding to copy filtered resources. [INFO] [compiler:testCompile] [INFO] No sources to compile [INFO] [surefire:test] [INFO] No tests to run. [INFO] [jar:jar] [INFO] Building jar: ~\cours-maven-example\target\cours-maven-example-1.0.jar [INFO] [install:install] [INFO] Installing ~\cours-maven-example\target\cours-maven-example-1.0.jar to ~\.m2\repository\com\developpez\cours-maven-example\1.0\cours-maven-example -1.0.jar [INFO - - [INFO] BUILD SUCCESSFUL [INFO - - [INFO] Total time: 9 seconds [INFO] Finished at: Tue Aug 12 14:36:05 CEST 2008 [INFO] Final Memory: 8M/14M [INFO - - Le cycle clean est une exception.

Il ne fait pas partie directement du cycle de vie mais peut toujours être utilisé. Il permet de nettoyer (supprimer) le répertoire de travail de Maven. Il fait référence au goal clean du plugin clean.

Vous pouvez aussi lire