Introduction au Maven

Gérer les dépendances avec Maven

Ce site ne sera plus alimenté de contenu après août 2014. Tous les nouveaux articles seront redigés pour www.waitingforcode.com

Notre application de gestion de la librairie est actuellement déployée avec Apache Ant. Cependant, malgré son caractère abordable dans la conception et l'exécution (tests et déploiement) d'une application, il ne correspond pas à 100% à ce qu'on recherche.

Un inconvénient d'Apache Ant est qu'il ne permet pas de gérer les dépendences entre les JARs utilisés par le projet. Imaginons que nous avons un JAR qui génère les PDFs (pdf.jar). Il nécessite la présente d'un autre JAR dont le but est la gestion des polices (font.jar). Les deux sont représentées indepéndémment. Maintenant, au bout de 10 mois de vie de la version 1.0 du pdf.jar, son producteur décide d'utiliser de nouvelles fonctionnalités de la nouvelle version du font.jar. Il met son nouveau pdf.jar disponible au téléchargement. On télécharge et place le nouvel archive dans notre répertoire avec les JARs. Cependant, au déploiement on verra l'application mal fonctionner car on n'avait pas mis à jour le font.jar. Pour éviter ce genre de situations on peut utiliser soit Apache Ivy (sous-projet d'Apache Ant), soit Maven. On privilégiera ce deuxième car il s'agit d'un outil qui regroupe les fonctionnalités des deux projets Apache (déploiement et gestion des dépendances).

Qu'est-ce que c'est Maven ?

Comme on l'a pu constater sur le cas d'introduction, Maven est également un outil d'Apache Software Foundation, dont le but est faciliter le déploiement et la gestion des dépendances à un développeur.

Les objectifs du Maven sont :
- faciliter la construction du projet
- fournir un système unique de la construction de projet
- fournir les informations de qualité sur le projet
- fournir les directives sur les bonnes pratiques du développement
- permettre une migration transparente à de nouvelle fonctionnalités

Maven est également un repértoire virtuel qui contient les JARs téléchargeables. Chaque fois où une dépendance est renseignée dans le fichier de configuration du projet, elle peut être directement téléchargée en ligne.

Composants Maven

Tout d'abord on verra les éléments qui composent le document XML qui décrit le projet. Ce fichier s'appelle pom.xml. Voici les éléments qu'on retrouvera dans ce document :

XPath Description
/project/modelVersion la version du modèle objet utilisée par ce pom.xml
/project/groupId et /project/dependencies/dependency/groupId l'identifiant du groupe du projet
/project/artifactId et /project/dependencies/dependency/artifactId l'identifiant de l'artefacte (artifact = projet)
/project/version et /project/dependencies/dependency/version la version du projet dans le groupe
/project/packaging le package utilisé pour le projet (JAR, WAR, EAR...)
/project/name le nom du projet
/project/url l'URL sur lequel se trouve le projet
/project/description la description du projet
/project/dependencies toutes les dépendences externes dont a besoin notre projet pour pouvoir être déployé
/project/dependencies/dependency la dépendance utilisée par le projet
/project/dependencies/dependency/scope le cadre (scope) de la dépendance; peut être :
  • compile : scope par défaut, utilisé si l'élément est absent. Il signifie que la dépendance sera incluse dans tous les classpaths du projet.
  • test : la dépendance n'est pas utilisée par l'application uniquement dans le cas des tests.
  • runtime : il signifie la dépendance qui n'est pas présente au moment de compilation, mais seulement au moment d'exécution
  • provided : il concerne toutes les dépendance qui doivent être fournies par l'environnement d'exécution (JDK) ou le servlet container dans le cas des applications web.
  • system : il ressemble au provided sauf qu'il faut fournier le JAR contenant la dépendance
/project/build informations nécessaires pour construire le projet
/project/build/resources les resources du projet, comme les fichiers properties ou XML
/project/build/resources/resource décrit une seule resource du projet
/project/build/resources/resource/directory le répertoire dans lequel sont placées les resources
/project/repositories liste des dépôts où Maven va chercher les dépendances à télécharger
/project/repositories/repository un dépôt où Maven ira récupérer la dépendance
/project/repositories/repository/id l'identifiant du dépôt avec la dépandance
/project/repositories/repository/name le nom du dépôt
/project/repositories/repository/layout le type du dépôt : legacy ou default
/project/repositories/repository/url l'adresse URL du dépôt
/project/repositories/repository/snapshots détermine comment gérer les snapshots du dépôt
/project/repositories/repository/snapshots/enabled si true, va utiliser ce dépôt pour le téléchargement du projet
/project/pluginRepositories
/project/directory le répertoire où tous les fichiers générés seront stockés
/project/finalName le nom final du projet; par défaut correspond au ${l'identifiant du projet}-${version}
/project/sourceDirectory le dossier de source du projet. Le système de build va compiler les fichiers compris dans ce répertoire.
/project/scriptSourceDirectory le dossier avec les scripts du projet
/project/testSourceDirectory le répertoire contenant les tests unitaires du projet

Vous trouverez d'autres éléments intéressants dans la documentation du Maven.

Commandes Maven

Maintenant, quand on connaît la majorité des éléments, on pourra passer à l'exécution du Maven. Le lancement se fait dans la ligne de commandes en tapant mvn. Des fonctions intéressantes sont :
- mvn package : crée le JAR du projet sur la base des fichiers compilés.
- mvn clean : supprime les fichiers générés.
- mvn clean install : supprime tous les fichiers compilés et lance ensuite mvn install.
- mvn test : exécute les tests unitaires.
- mvn compile : compile le code de source du projet.
- mvn install : crée le JAR du projet et le place dans le répertoire local. Le projet peut ensuite être utilisé comme la dépendance pour d'autres projets locaux.
- mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-webapp -DgroupId=com.mycompany -DartifactId=my-app : crée un nouveau projet de l'application web.
- mvn javadoc:javadoc : génère la JavaDoc.

L'article ci-dessous nous a présentés les bases de fonctionnement du Maven. On a vu que c'est un outil qui permet de standardiser le processus de développement et de la maintenance d'une application Java. Avec sa gestion des dépendances integrée, il est possible de gérer plus facilement les fichiers que nécessite notre application pour un fonctionnement correct. Dans le prochain article on abordera la mise en place d'une configuration Maven pour notre projet de la librairie.

Bartosz KONIECZNY Maven

Une question ? Une remarque ?

*

*

Moi

Développeur d'applications Internet et journaliste passionné par l'adjectif français. Un aigle polonais orienté vers la progression, volant très haut et écoutant du zouk après les matches du foot français.

Vous appréciez mon travail ?

Pour contribuer au développement de ce site, ou pour remercier pour des articles rédigés, vous pouvez faire un don.

Un conseil Symfony2

Comment récupérer tous les paramètres ?

Pour récupérer tous les paramètres dans Symfony2, il faut appeler la méthode $request->request->all() (où $request est l'instance de la classe Symfony\Component\HttpFoundation\Request.