Maven (Maven 2 pour la dernière version) est un projet de la fondation Apache.
Il s’agit d’un outil de gestion conçut pour suivre et faciliter l’évolution d’un projet java. Pour atteindre cet objectif, cet outil offre des fonctionnalités pour :
- La Construction, compilation, assemblage
- La génération de documentation
- L’édition de rapports (qualité du projet…
- La gestion des sources et des dépendances
- Le déploiement
Ainsi il est possible de fournir des guides sur les meilleures pratiques de développement permettant de garantir une qualité projet améliorée. Maven se distingue des outils comme Ant par son approche déclarative basée sur le cycle de vie et non sur l’ensemble des tâches à exécuter.
Le POMLe POM (Projet Object Model) est au centre d’un projet Maven. Il s’agit d’une façon de formaliser et de décrire déclarativement un projet java. Ainsi on peut retrouver les informations comme :
l’organisation du projet (nom du projet, contributeurs, license, organisation, mailling lists
l’organisation des sources (dépendances, répertoire sources, tests…
Le POM est un fichier sous format XML placé dans le répertoire racine du projet Java.
Archetype et structure de répertoireUn archetype est un modèle qui sert à créer des objets du même type. Ainsi dans une entreprise, il est possible de formaliser les meilleures pratiques à travers des archetypes. Il permet un gain de temps important et permet de respecter des conventions.
En outre, Maven possède une structure de répertoire standardisée par défaut. Un répertoire pour les sources, un pour les ressources, les librairies, les tests unitaires…
Cycle de vie de projetComme dis précédemment, Maven 2 se repose essentiellement sur les phases d’un projet. Ainsi suivant chaque phase, il est possible de lancer une commande comme par exemple la compilation des sources du projet.
Les principales phases sont :
- Génération des sources
- Compilation des sources
- Compilation des tests
- Lancement des tests
- Package du projet (format JAR, WAR…
- Lancement des tests dans un environnement d’intégration
- Installation du projet localement
- Installation du projet dans l’environnement de production
Chaque phase est défini par un ensemble de plug-ins pour effectuer le travail demandé. Les plug-ins ou artefacts sont généralement des fichiers .jar.
Gestion des librairies et des dépendancesUne dépendances est une référence vers un artefact spécifique contenu dans un repository (Il s’agit d’un répertoire local ou distant contenant un ensemble d’artefact). Ainsi dans un projet, on a besoin de créer des liens avec des fichiers JAR (hibernate, struts… dans des versions données. Or comme chaque développeur le sait, il est parfois difficile de faire marcher une librairie car il manque toujours un fichier .jar!! C’est là que Maven rentre en jeu d’une manière géniale. Il suffit de lui dire quelle librairie on a besoin et il se chargera de récupérer automatiquement tous les fichiers nécessaires pour faire fonctionner cette version d’Hibernate! Plus précisémment, Maven cherchera dans les repository défini dans le POM pour récupérer l’ensemble des fichiers nécessaires. Gain de temps non négligeable!
De plus Maven offre la possibilité de gérer la porté des dépendances. En effet dans un produit en production, il n’est pas forcément utile de mettre les bibliotèques nécessaires aux tests unitaires ou à la gestion mémoire. Ainsi à chaque phase du projet, les dépendances possédent une portée.
- compile: Une dépendance de portée compile est disponible dans toutes les phases. C’est la valeur par défaut.
- provided: Une dépendance de portée provided est utilisée pour compiler l’application, mais ne sera pas déployée. Vous utiliserez cette portée quand vous attendez du JDK ou du serveur d’application qu’il vous mette le JAR à disposition. L’API servlet est un bon exemple.
- runtime: Les dépendances de portées runtime ne sont pas nécessaires pour la compilation, uniquement pour l’exécution, comme les drivers JDBC (Java Database Connectivity).
- test: Les dépendances de portées test sont uniquement nécessaires pour compiler et exécuter les tests (par exemple Junit).
CommunicationMaven permet la génération automatique d’un site Web. Il intégre un certains nombre de rappport qui peuvent être obtenu individuellement. On distingue deux types de rapport.
Les rapports de bases comme les dépendances, la couverture des tests, liste des membres et organisation de projet
Les rapports optionnels dépendant d’une application tierce comme checkstyle, PMD ou Continuum.
Cette partie permet d’améliorer la communication interne au sein du projet, de suivre l’évolution du projet et de communiquer avec le client sur l’avancement.
On peut dire que Maven2 est devenu un outil indispensable dans tout projet java récent. Une standardisation poussée et une intégration des bonnes pratiques donne à Maven une importance majeure dans l’industrialisation du processus de développement. Maven (Maven 2 pour la dernière version) est un projet de la fondation Apache.
Pour en savoir plus :