Apache Maven, un outil indispensable

Dans le cadre d’un projet personnel, je souhaite réutiliser les technologies rencontrées lors de mon stage en entreprise de quatrième année. Je vais présenter ces technologies dans le cadre de mon utilisation lors de ce projet. Maven est un outil de gestion de projet Java qui permet la mise en place de règles universelles et simples pour le paramétrage d’un projet en Java. Les possibilités de cet outil sont très vastes : compilation, déploiement, génération de la documentation, lancement des tests, génération d’une structure de projet, récupération de dépendances, gestion des ressources… Je vous présenterai ici, certaines de ces fonctions, vues lors de la création de mon projet personnel.

Logo de Apache Maven

 

Maven est un outil de l’organisation Apache développé en Java avec la licence Apache License 2,0. Il se base sur un document XML, appelé pom.xml ou Project Object Model, Ce document contient toute la configuration nécessaire à un projet dont le nom du projet, sa version, les dépendances vers d’autres projets. Il permet de décrire les différentes phases du projet, notamment les tests, la compilation et le packaging.

Voici un exemple de document pom.xml :

 

Création d’un projet

Maven permet la création de projet de manière rapide avec une architecture standardisée. Ces projets sont très facile à importer dans un environnement de développement.

Le paramètre groupeId est une indicateur d’appartenance à un groupe. Souvent, on utilise le nom de domaine de l’entreprise ou de l’organisation. Enfin, artifactId est l’identifiant unique du projet que l’on souhaite créer.

La commande va afficher un certains nombres d’archétypes disponibles pour la création d’un projet. Un archétype est une structure par défaut qui est proposé sur le site de Maven et qui contient la structure des dossiers et certains fichiers permettant de démarrer un projet (une classe Java avec une classe de test, ou une page JSP). La liste des archétypes disponible est très longue lorsqu’elle est affichée, il est possible de faire un tri en tapant une chaîne de caractères. Il est également possible de choisir un archétype avant et de le nommer lors du lancement de la commande.

 Cet archétype permet de créer une application de type WebApplication facilement déployable sur un serveur d’application Java.

Ces archétype ne sont que des structures de projets fournissant un pom.xml très simple et peu paramétré. Il permettent d’aller plus vite dans la création de projets mais n’empêchent en aucun de modifier la structure. La liste des archétypes officiels de Apache est présente ici.

Structure du projet

Par défaut Maven considère l’architecture suivante :

  • {project-directory}/ : Racine du projet, dossier du pom.xml
  • {project-directory}/src/main/java : Dossier contenant les fichiers sources Java qui seront compilés
  • {project-directory}/src/test/java : Dossier contenant les fichiers de tests du projet (gérés avec JUnit ou TestNG)
  • {project-directory}/target : Dossier contenant les résultats de la compilation, le package final dont la forme dépend de la configuration de Maven

Dans le cas de ma WebApplication, je retrouve d’autres sous dossiers

  • {project-directory}/src/main/webapp : Contient une page jsp et un fichier de configuration WEB-INF/web.xml

Actions

Maven permet de réaliser plusieurs actions sur le projet dans lequel est placé le pom.xml.

Il est possible d’exécuter les plugins individuellement pour lancer une actions particulière :

Exemple :

Cette commande permet d’exécuter la commande test du plugin surefire, ce qui va lancer tous les tests du projet.

Afin de ne pas avoir à connaître tous les plugins, Maven comporte nativement plusieurs commandes qui permettent de réaliser les principales de gestion d’un projet avec des plugins pré-configurés.

  • mvn validate : Vérifie que la structure du projet est valide et que toutes les informations nécessaires sont présentes
  • mvn compile : Compile toutes les sources du projet
  • mvn test : Lance toutes les classes de tests présentes dans le projet
  • mvn package : Crée un document déployable avec les sources compilées, par exemple une archive JAR ou WAR
  • mvn install : Installe le package dans le dépôt local de Maven afin qu’il puisse être utilisé par d’autres projets.

Chaque commande va appeler les précédents dans l’ordre ci-dessus, ainsi la commande install va lancer les tests et les autres commandes dans l’ordre.

Pom.xml

Le pom.xml contient de nombreuses données capitales pour le projet.

La racine du document est la balise project décrivant le format XML. La balise modelVersion est obligatoire et définit le numéro
de version du pom pour assurer la stabilité du fonctionnement de Maven. Les groupId et artifactId sont les valeurs que l’on a entrées lors de la création du projet. La balise packaging va définir sous quelle forme doit être l’archive en sortie de la commande package dans le dossier target. Les balises name et url permettent de définir le nom et de suivre les versions de notre projet (les versions snapshot sont des versions en développement). Les dépendances à d’autres projets, librairies ou packages sont listées dans la balise dependancies et définies par leur groupId, artifactId et une version. Il peut leur être associé un scope qui va délimiter leur utilisation dans le projet (compile, test, runtime, provided).

Lors de la création du pom.xml et lorsque l’on rajoute une dépendance, Maven va aller chercher sur les dépôts distants les librairies qui sont indiquées. Ce système permet d’avoir très rapidement l’ensemble du projet fonctionnel. Cela rend également la maintenabilité plus forte car pour changer une version d’une librairie, plus besoin d’aller la télécharger sur le site réservé, un simple changement dans le pom.xml et la modification est faite. Ce concept est très intéressant dans le cas ou le projet est présent sur un système de versioning comme Subversion ou Git, les sources et le pom étant suffisants pour avoir le projet complet.

Si on veut personnaliser les actions de nos commande, il nous faut changer la configuration des plugins dans la balise build, ou rajouter de nouveaux plugins. Dans notre précédent exemple, nous avons reconfiguré le compilateur pour qu’il utilise la version 7 de Java. Chaque plugin présent dans cette balise va être utilisé dans les processus de Maven ce qui nous permet d’avoir véritablement le contrôle sur l’outil.

Maven permet énormément de manipulation au niveau des ressources, fichiers sources, et dépendances. Les plugins peuvent être paramétrés pour exécuter des tâches très précises. Maven est donc un outil indispensable pour le développement de projets Java et il est très utilisé sur des projets de grande taille.

spacer

Laisser un commentaire