Aller au contenu principal

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 .jar depuis un dépôt central (Maven Central)
  • assure un build reproductible : tout le monde dans l'équipe utilise exactement les mêmes versions
Maven vs Gradle

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

  1. File > New > Project
  2. Sélectionne Maven Archetype à gauche
  3. Choisis le JDK 21
  4. Archetype : maven-archetype-quickstart (projet Java simple)
  5. Renseigne groupId (ex: fr.joliciel) et artifactId (ex: mon-projet)
  6. 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>
astuce

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


Quel fichier est le cœur de configuration d'un projet Maven ?


Que signifie 'artifactId' dans un pom.xml ?


Quel dossier Maven génère les fichiers compilés et ne doit PAS être versionné ?


Quelle commande Maven crée le fichier .jar final ?


Où trouve-t-on les coordonnées (groupId, artifactId, version) d'une bibliothèque ?


Quel dossier Maven contient le code source de production (pas les tests) ?


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.


Bonne pratique - Toujours spécifier la version Java

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.


Bonne pratique - Fixer les versions de dépendances

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.


Bonne pratique - Ne jamais versionner target/

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.

📌 Une solution