[DEFINITION DES OUTILS DE TRAVAIL] I. Error! Use the Home tab to apply Titre 1 to the text that you want to appear here. Maven : Gestionnaire de dépendance Le déploiement d'applications est devenu aujourd'hui de plus en plus complexe. En effet, à chaque phase d’un projet, les développeurs doivent gérer un environnement différent : intégration, recette, pré-production, production. Chaque environnement possédant ses propres caractéristiques : adresses IP, serveurs de bases de données, etc ; il est de plus en plus difficile d’obtenir rapidement un déploiement fonctionnel. Maven, développé par la société Apache, permet donc de s'affranchir de ces contraintes et d'uniformiser le déploiement des applications en gérant les dépendances. A. Définition Maven est un outil logiciel libre pour la gestion et l'automatisation de production des projets logiciels Java en général et Java EE en particulier. Il offre entre autres les fonctionnalités suivantes : Compilation et déploiement des applications Java (JAR, WAR) Gestion des librairies requises par l'application Exécution des tests unitaires Génération des documentations du projet (site web, pdf, Latex) Intégration dans différents IDE (Eclipse, JBuilder) Sur le principe de fonctionnement, Maven est semblable à « make » c'est-à-dire qu’il permet de produire un logiciel à partir de ses sources, en optimisant les tâches réalisées à cette fin et en garantissant le bon ordre de fabrication. Ainsi nous disposons d’une façon standard de compiler les projets, d’une façon simple de publier les informations du projet et d’une façon de partager les JAR entre projets. B. Principe de fonctionnement Afin de bien gérer les dépendances, Maven s'appuie sur des repositories de librairies (jar). Ces repositories peuvent être locaux à la machine ou accessibles via HTTP. Ainsi, à [DEFINITION DES OUTILS DE TRAVAIL] Error! Use the Home tab to apply Titre 1 to the text that you want to appear here. sa première exécution, Maven télécharge les différents plugins dont il a besoin et les installe dans le répertoire /.maven/repository situé dans le répertoire de travail de l'utilisateur. Ainsi, ces mêmes librairies peuvent être réutilisées entre les différents projets. Maven utilise la technologie Project Object Model (POM) afin de décrire un projet, ses dépendances avec des modules externes et l'ordre à suivre pour sa production. Il est livré avec un grand nombre de tâches pré-définies, comme la compilation de code Java ou encore sa modularisation. C. Principe de configuration Maven fournit un moyen de configuration simple, basé sur le format XML. Chaque projet ou sous-projet est configuré par un POM qui contient les informations nécessaires à Maven pour traiter le projet (nom du projet, numéro de version, dépendances vers d'autres projets, bibliothèques nécessaires à la compilation, noms des contributeurs etc.). Ce POM se matérialise par un fichier « pom.xml » à la racine du projet. Cette approche est orientée objet car un POM hérite des propriétés du POM du projet parent. Si une propriété est redéfinie dans le POM du projet, elle recouvre celle qui est définie dans le projet parent. Ceci introduit le concept de réutilisation de configuration. 1. Structure du fichier de configuration Le fichier de configuration (pom.xml) est comme son nom l’indique, un fichier au format XML. Voici un exemple minimal d’un projet « ProjectTest » : [DEFINITION DES OUTILS DE TRAVAIL] Error! Use the Home tab to apply Titre 1 to the text that you want to appear here. Figure 1 : Architecture du fichier POM.xml On peut noter la définition d’une librairie « mysql-connector » nécessaire à ce projet. Cela est réalisé très simplement en spécifiant groupID,artifactId et version de la librairie en question. Il est possible de définir les propriétés de ce fichier XML soit directement par édition du fichier, soit en passant par un plugin de notre IDE. D. Utilisation de Maven 1. Intégration à l’IDE eclipse Nous utiliserons pour le développement du projet Last Project, l’IDE eclipse. Celui-ci bénéficie d’un plugin Maven. Une fois installé il va nous permettre de réaliser des actions Maven plus simplement qu’en ligne de commande. Voici le menu Maven intégré à eclipse : Figure 2 : Menu maven sous eclipse Le plugin permet de créer un nouveau projet, ou encore d’effectuer des actions maven sur un projet existant. Comme dit précédemment, plusieurs « cibles » maven sont [DEFINITION DES OUTILS DE TRAVAIL] Error! Use the Home tab to apply Titre 1 to the text that you want to appear here. définies par défaut, c’est notamment le cas des cibles build, clean, test. Elles permettent facilement de compiler l’application, d’exécuter les tests unitaires, ou encore de packager l’application sous la forme d’une archive (.jar ou .war). Il est possible de rajouter des cibles pour un projet spécifique. En effet, une quantité impressionnante de modules pour Maven peut venir se greffer sur la configuration d’un projet. Nous pouvons par exemple noter la présence d’une cible « sonar ». (Voir partie X sur Sonar). Sonar permettant d’analyser la qualité du code source et la couverture du test de notre logiciel, la cible sonar permet d’exécuter les tests unitaires, et de publier les résultats sur un serveur sonar. Cela va s’avérer très pratique lors de notre phase de développement. [DEFINITION DES OUTILS DE TRAVAIL] Error! Use the Home tab to apply Titre 1 to the text that you want to appear here. 2. Ajout d’une dépendance via eclipse L’IDE eclipse permet également d’ajouter très facilement des dépendances de librairies pour un projet. Voici l’exemple d’un projet « Project » dans eclipse : Figure 3 : Ajout de dépendance via eclipse Il suffit de parcourir les menus Maven pour ajouter une dépendance. Admettons que notre application nécessite l’utilisation d’une connexion à une base de données MySQL, la librairie « mysql-connector-java.jar » est nécessaire. Figure 4 : Sélection de la dépendance [DEFINITION DES OUTILS DE TRAVAIL] Error! Use the Home tab to apply Titre 1 to the text that you want to appear here. 3. Utilisation du gestionnaire de repositories Nexus Afin de nous faciliter la tâche dans la recherche et l’utilisation des dépendances pour notre projet, nous allons également utiliser Nexus. Ce logiciel gèrera les "artefacts" nécessaire pour le développement, le déploiement, et le provisionnement de notre projet. Cela va permettre de centraliser les repositories de librairies externes existant très simplement. Le serveur Nexus sera sur la même machine que le serveur d’intégration continue, ce qui garantira une rapidité lors de l’ajout de dépendance. Dans la configuration de Maven, nous déclarerons uniquement l’URL vers le repository central qui sera Nexus. A chaque dépendance dont Maven aura besoin, il ira chercher le fichier sur le serveur Nexus. Le serveur Nexus disposera donc en local de toutes les librairies existantes dans le monde Java. Cela crée une sorte de miroir. Visualisation de l’interface de Nexus : Figure 5 : Gestionnaire de repositories Nexus [DEFINITION DES OUTILS DE TRAVAIL] Error! Use the Home tab to apply Titre 1 to the text that you want to appear here.