Maven en 5 minutes

Beaucoup de personnes sont effrayées lorsqu’on prononce ce mot. C’est dommage car Maven est un outil puissant qui, bien maîtrisé, automatisera beaucoup de tâches dans votre projet.

Afin de vous permettre d’appréhender l’outil, nous allons revenir ensemble sur les bases de Maven en 5 minutes.

Les repositories

Les projets utilisent des librairies. Ces dernières sont stockées dans des espaces qui s’appellent « repositories ». On distingue 2 types de repositories : les locaux et les distants.

Parmi les repositories distants il y en a des publics et des privés (repository d’entreprise par exemple qui met à disposition des artifacts au sein de l’entreprise). Les repositories mettent à disposition des librairies (des fichiers JAR mais pas seulement) en téléchargement. On appelle ces libraires artifacts.

Un repository local est une copie en local de repository distant contenant tous les artifacts téléchargés dans le passé (mise en cache).

Un artifact Maven est composé d’un nom de domaine (fr.sii.library par exemple), d’un id (commons par exemple) et d’un numéro de version (0.0.1).

Gestion des dépendances

Sans Maven, vous auriez dû aller dans les propriétés de votre projet et ajouter vos dépendances dans cet écran :

dependances eclipse

Il faut le faire manuellement pour chaque librairie, et disposer de ces dernières.

Avec Maven, la gestion des dépendances s’effectue au travers d’un fichier bien connu : le pom.xml. En voici un exemple :

exemple pom

Dans l’exemple ci-dessus, la partie bleue définit les propriétés de l’artifact (de votre projet du coup). Les parties rouges sont les dépendances que l’on souhaite importer.

La 1ère dépendance est une dépendance interne (on ne la trouvera pas sur un repository public, elle sera sur le repository d’entreprise sii). La 2ème dépendance par contre est disponible sur les repos publics, il s’agit de dozer.

Dans une invite de commande, un mvn validate se chargera de vérifier la cohérence du pom mais surtout (et c’est ce qui nous intéresse ici), ramènera les dépendances sur votre projet. Il ira chercher sur le ou les repositories configurés (on va dire ici qu’il s’agit du repo d’entreprise) les artifacts dans les versions spécifiées, puis ira les copier dans votre repository local. Si vous avez déjà la dernière version d’un artifact en local, il ira directement la chercher là-bas.

Dépendances transitives

Nous avons ajouté une dépendance vers la libraire fr.sii.library.model 0.0.1-SNAPSHOT. Cette librairie contient elle aussi un fichier pom.xml avec ses dépendances. Ces dépendances sont ce qu’on appelle « transitives », elles sont indirectes.

Sans Maven, à l’exécution de votre projet, vous aurez une erreur disant qu’il manque des dépendances. Il faudra aller les chercher manuellement et vérifier qu’il n’y a pas de conflits de versions. Cela va vite devenir fastidieux.

Avec Maven, ces dépendances seront ramenées automatiquement en cascade.

La commande mvn dependency:tree vous permet de voir l’arbre des dépendances de votre projet.

Déploiement des artifacts

Pour mettre à disposition votre artifact sur le repository distant configuré, vous devez appeler la commande mvn deploy.

Repartons sur nos dépendances (voir schéma ci-dessus). Nous travaillons sur la librairie « commons » qui utilise « model ». Or, nous souhaitons ajouter une fonctionnalité dans « model » qui sera utilisée dans « commons ».

Nous pourrions faire l’évolution dans « model » puis lancer un mvn deploy afin que la dépendance soit accessible dans « commons ». Si vous êtes sûr de votre coup et que vos tests sont suffisant pour déterminer que le travail est bien fait, pourquoi pas. Sinon, il serait plus pratique de pousser dans votre repository local afin de rendre la dépendance visible à vos autres projets, tester, puis mettre à disposition sur le repository distant une fois satisfait.

C’est ce que fait la commande mvn install. Elle va compiler, exécuter les tests, puis déployer dans le repo local. Vous pourrez donc tester sereinement votre dépendance en local avant de la mettre à disposition avec mvn deploy.

Ce n’est pas tout

Maven est une boite à outils qui permet de faire beaucoup d’autres choses. Il existe des plugins dont la configuration se fait toujours dans le pom.xml et qui permet d’automatiser beaucoup de tâches : compilation (mvn compile), exécution des tests (mvn test), génération de la javadoc, etc…

Vous pouvez (devez) également factoriser vos dépendances avec l’utilisation de pom parent, faire des modules pour lier vos projets, gérer vos releases, etc…

Pour finir, il existe un plugin dans eclipse (m2) qui vous affranchit de toutes ces commandes. Il me semble cependant nécessaire de bien comprendre le fonctionnement de Maven avant d’utiliser ces outils.

Site de maven : http://maven.apache.org/

 

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

cinq × deux =