Maven
Introduction
Maven est un outil de construction pour Java. Il permet d'importer des dépendance, et d'automatiser la construction et l'empaquettage d'un artéfact Java.
Tous les IDE Java intègrent Maven (nativement ou via des plugins) qui permettent d'utiliser Maven via l'interface graphique de l'IDE. Ce tutoriel utilisera des instructions de l'interface en ligne de commande de Maven afin d'être indépendant de l'IDE.
Installation
Avec Chocolatey
Vous pouvez utiliser chocolatey pour installer maven :
choco install maven -y
Installation manuelle
Dirigez vous sur ce lien et téléchargez la "binary zip archive". Décompressez là ensuite et stockez son contenu dans l'endroit où vous rangez vos outils (C:/tools
par exemple).
Ajoutez ensuite le dossier bin
contenu dans le répertoire de maven que vous venez de décompressez au PATH.
Testez ensuite votre installation en tapant la commande suivante dans une invite de commande :
mvn --version
Archétypes
Maven permet de créer des projets à partir de d'archétypes pour gagner du temps sur la mise en place de l'arboresence de fichier du projet, en utilisant une convention et donc les bonnes pratiques de la communauté Java.
Pour créer un projet selon un archétype, utilisez la commande suivante :
mvn archetype:generate -DarchetypeArtifactId=<nom archétype>
A l'execution de cette commande, plusieurs informations vous sont demandées :
groupId
: Votre espace de noms. Par convention il s'agit de votre nom de domaine personnel, ou alors votre pseudo précédé d'une extension de domaine :fr.ombrelin
artefactId
: Le nom de votre projetversion
: Version du projet (défaut :1.0-SNAPSHOT
)package
: Nom du package (défaut : legroupId
)
L'achétype le plus utilisé est maven-archetype-quickstart
. Il définit un projet Java SE basique. Pour créer un project selon cet artéfact :
mvn archetype:generate -DarchetypeArtifactId=maven-archetype-quickstart
Project Object Model
Après la création du projet depuis un archétype, maven génère un dossier contenant le projet. Ce dossier contient l'arborescence des fichiers ainsi qu'un fichier, le fichier pom.xml
. Ce fichier contient la configuration de maven.
La balise <project>
est la racine du pom.xml
.
Méta données du projet
Les premières balises contiennent les méta données du projet, notamment les informations que vous avez enseignées au moment de se création.
Gestion des dépendances
La balise <dependencies>
permet de lister les dépendances du projet, c'est à dire les librairies qui sont utilisées par le projet. Pour installer une dépendance, il suffit d'ajouter la balise <dependency>
qui lui correspond ici ; maven s'occupera ensuite de télécharger les archives jar de la librairie et de les ajouter au classpath du projet.
Par exemple, pour ajouter JUnit 5 au projet ajoutez cette balise aux dépendances :
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.5.2</version>
<scope>test</scope>
</dependency>
puis exécutez mvn dependency:resolve
afin de télécharger et ajouter au classpath les dépendances listées.
Lifecycle Goals
La construction avec maven si un certaine nombre de lifecycles. On peut exécuter différent goals de lifecycles afin de faires différentes actions. Les plus utiles sont :
compile
: Compile le code source en bytecodetest
: Exécute les tests unitairespackage
: Package le projet en archive JAR
Plugins
Les plugins permettant d'ajouter de nouveaux goals afin de faire différentes actions, comme pas exemple générer un JAR exécutable. Pour ce faire, ajoutez la balise build suivante à votre pom.xml
:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>le nom complet de votre classe principale (nomdupackage.nomdelaclasse)</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>