Maven est un gestionnaire de build, qui remplace (et encapsule) un ancien : ANT.
Il permet donc de builder (compiler) les src, effectuer des test unitaire ou d'intégration, de packager l'application, déployer, et de l'exécuter.
Il offre aussi plein d'autre possibilité pour peux que vous sachiez l'utiliser.
Mais comme il est très puissant, il est aussi très complexe …
Très simple : récupérer et extraire le zip depuis le site de maven. Mettre le chemin de mvn.exe dans %PATH%, et le tour est joué. Ouvrir un invité DOS ou shell et tapper :
mvn -version
Si bien installé, alors vous devriez voir, la version de maven, de java, de l'os, …
Chaque projet maven est constitué, à sa racine, d'un fichier (type makefile) nommé pom.xml. Il définit/paramètre un ensemble d'actions liées au projet, parmi la copie de fichier, la compilation, le lancement de l'application, le lancement des tests, le prétraitement, le nettoyage des fichiers générés.
La plupart du temps, le pom.xml est configuré selon un système d'arborescence standard qui fait que :
Le gros avantage de Maven est qu’il apporte la récupération automatique de dépendance (comprendre librairies), à partir de repositories (sur internet ou en intranet). On citera notamment le repo “maven central”. Une dépendance correspond en fait à un package (jar, war, plugin), accompagné de d'autres fichiers qui le décrivent et qui décrivent ses dépendances. Dès lors on comprend bien que finallement, chaque projet possèdera une arborescence de dépendances.
Le repo local, c'est ce dont j'ai parlé plus tôt : C:\Users\xavier\.m2. C'est le dossier qui contient toutes les dépendance et projet dont vous disposez.
La grande puissance de Maven est de savoir rapatrier toutes les dépendances de chaque projet (librairies et plugins jar). Ces librairies et plugins sont situés sur des dépôts distants. (le plus connu est maven central, qui est le repositiory distant par défaut je crois).
Maven réalise automatiquement le rapatriement des dépendances requise par le projet dans le repo local (si elles ne sont pas déjà présentes), et le projet les référera. Le repo local est situé par défault dans c:\Users\<User1>\.m2\repository, on y retrouve :
Une fois récupérée dans le repo local l'arborescence de chaque dépendance suivra le même pattern : <.m2_folder>/repository/<groupId>/<artifactId>/<version>
Dans les 2 cas, ces artifacts sont toujours générés avec des fichiers XML les décrivant, dont notamment le fichier d’extension .pom
Les dépendances sont toujours stockées avec des fichiers XML les décrivant, notamment le fichier d’extension .pom. Ces descriptions embarque leur dépendances (librairies jars + xml + pom), qui dépendent à leur tour d’autres jars … maven analyse leur dépendance et va les chercher si besoin. Cette notion de transitivité, fait qu'une dépendance peut dépendre d'une autre, traduit l’existence, pour chaque projet, d’un arbre de dépendance. Une commande plus bas indique comme l’afficher avec maven.
Remarque : Toutes les dépendances référencées dans son projet ne doivent pas forcément être utilisées de la même manière dans le processus de build ou lors de l'exécution de l'artéfact. Pour se faire, on peut associer à chaque dépendance un scope (utilisé pour la compilation, ou juste l’éxécution, ou juste les tests).
Deux règles sont importantes à retenir concernant les phases :