Maven
Gestion des dépendances
Notions théoriques
Pourquoi Maven ?
Quand vous développez une application Java, vous avez souvent besoin de bibliothèques externes : un driver de base de données, un framework de logging, une bibliothèque de traitement JSON... Sans outil de gestion, vous devriez télécharger manuellement chaque bibliothèque (fichier .jar) et l'ajouter à votre projet.
Maven résout ce problème. C'est un outil qui :
- gère automatiquement les dépendances (bibliothèques) de votre projet
- télécharge les
.jardepuis un dépôt central (Maven Central) - assure un build reproductible : tout le monde dans l'équipe utilise exactement les mêmes versions
Il existe deux outils de build majeurs en Java : Maven et Gradle. Ce cours utilise Maven car sa configuration XML est plus lisible pour les débutants et il est très répandu en entreprise.
Structure d'un projet Maven
mon-projet/
├── pom.xml ← fichier de configuration Maven (Project Object Model)
├── src/
│ ├── main/
│ │ ├── java/ ← votre code source
│ │ └── resources/ ← fichiers de configuration, propriétés
│ └── test/
│ ├── java/ ← vos tests unitaires
│ └── resources/
└── target/ ← fichiers compilés (généré par Maven, à ignorer dans Git)
Le fichier pom.xml
Le pom.xml (Project Object Model) est le cœur de tout projet Maven. Il décrit le projet et ses dépendances :
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!-- Identité du projet -->
<groupId>fr.joliciel</groupId>
<artifactId>mon-projet</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- Version de Java -->
<properties>
<maven.compiler.source>21</maven.compiler.source>
<maven.compiler.target>21</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<!-- Dépendances -->
<dependencies>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>2.0.9</version>
</dependency>
</dependencies>
</project>
Les coordonnées Maven
Chaque bibliothèque Maven est identifiée par trois coordonnées :
groupId: l'organisation ou le domaine (ex:org.slf4j,com.mysql)artifactId: le nom de la bibliothèque (ex:slf4j-api,mysql-connector-j)version: la version précise (ex:2.0.9)
Pour trouver ces coordonnées, va sur https://mvnrepository.com/ et recherche la bibliothèque souhaitée.
Ajouter une dépendance
Copiez le bloc <dependency> depuis MVN Repository et collez-le dans la section <dependencies> de votre pom.xml :
<dependencies>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>8.3.0</version>
</dependency>
</dependencies>
Maven télécharge automatiquement le .jar et le rend disponible dans votre projet.
Commandes Maven essentielles
mvn compile # Compile les sources
mvn test # Compile et lance les tests
mvn package # Compile, teste et crée le .jar dans target/
mvn clean # Supprime le dossier target/
mvn clean package # Nettoie puis repackage
Dans IntelliJ, un panneau "Maven" à droite liste ces commandes accessibles en double-cliquant.
Créer un projet Maven dans IntelliJ
- File > New > Project
- Sélectionne Maven Archetype à gauche
- Choisis le JDK 21
- Archetype :
maven-archetype-quickstart(projet Java simple) - Renseigne
groupId(ex:fr.joliciel) etartifactId(ex:mon-projet) - Clique Create
IntelliJ génère automatiquement la structure de dossiers et le pom.xml.
Fichier .gitignore pour Maven
Le dossier target/ contient les fichiers compilés. Il ne doit jamais être versionné dans Git :
# Dossier de build Maven
target/
# Fichiers IntelliJ
.idea/
*.iml
Exemple pratique
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>fr.joliciel.bts</groupId>
<artifactId>gestion-eleves</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<properties>
<maven.compiler.source>21</maven.compiler.source>
<maven.compiler.target>21</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- Driver MySQL -->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>8.3.0</version>
</dependency>
<!-- Logging -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.4.14</version>
</dependency>
</dependencies>
</project>
Après avoir modifié le pom.xml dans IntelliJ, une notification apparaît. Clique sur Load Maven Changes (ou l'icône de rechargement Maven en haut à droite du panneau Maven) pour que IntelliJ télécharge les nouvelles dépendances.
Test de mémorisation/compréhension
TP pour réfléchir et résoudre des problèmes
Vous allez écrire les parties essentielles d'un pom.xml pour un projet Maven complet.
Étape 1 — Écrire la section properties
Écris la section <properties> qui configure le compilateur Java 21 et l'encodage UTF-8.
Sans la section <properties> avec le compilateur, Maven utilise une version Java par défaut qui peut être ancienne. Spécifie toujours explicitement la version cible pour éviter les surprises lors du build.
Étape 2 — Ajouter une dépendance
Ajoute le driver MySQL Connector/J comme dépendance dans le pom.xml.
Spécifie toujours une version précise (ex: 8.3.0) plutôt que LATEST ou RELEASE. Cela garantit que le projet se compile de la même façon sur toutes les machines et à tout moment.
Étape 3 — Créer le .gitignore Maven
Crée un fichier .gitignore à la racine du projet pour exclure les fichiers générés.
Le dossier target/ peut peser plusieurs dizaines de Mo et se recrée automatiquement avec mvn package. Le versionner pollue l'historique Git et ralentit les opérations clone et pull. Ajoute-le toujours dans .gitignore dès la création du projet.