Skip to main content

Welcome to a Grasp lesson

Create a free account to keep studying and create your own study path.

Lesson 14

Gestion des Dépendances et Cycle de Vie Projet avec Maven

Recommended resources

Bonjour !

Dans la leçon précédente, nous avons vu comment rendre nos applications plus robustes grâce à une gestion efficace des exceptions. Savoir gérer les erreurs est essentiel, mais pour construire une application professionnelle complète, il nous faut des outils pour organiser notre projet, intégrer des bibliothèques externes et automatiser le processus de construction.

C'est là qu'intervient l'objectif d'aujourd'hui : comprendre la gestion des dépendances et le cycle de vie d'un projet avec Maven.

Dans vos projets JavaScript et PHP, vous avez certainement utilisé des outils comme npm/yarn ou composer. Maven remplit un rôle similaire dans l'écosystème Java : il standardise la structure des projets, gère les dépendances (les bibliothèques externes comme Spring, par exemple) et orchestre la construction de l'application (compilation, tests, création de l'exécutable). Maîtriser Maven est une étape indispensable pour passer de simples fichiers Java à des applications d'entreprise structurées.

1. Pourquoi Maven ?

Pour commencer, il est important de comprendre les problèmes que Maven résout. Au lieu de télécharger manuellement des fichiers JAR et de configurer des chemins de compilation complexes, Maven propose une approche basée sur la "convention plutôt que la configuration". Il définit une structure de projet standard et automatise les tâches répétitives.

La vidéo suivante introduit très bien l'intérêt de Maven pour des projets qui dépassent le simple fichier unique.

maven la structure d'un projet Java

Cette vidéo de la chaîne Tuto De Rien explique pourquoi on utilise Maven pour des projets Java plus complexes, en se concentrant sur la standardisation de la structure et la gestion des bibliothèques externes.

Regardez le début de la vidéo jusqu'à 01:48. Notez les deux avantages principaux mis en avant : la création d'une structure de projet standardisée et la simplification de l'intégration des dépendances externes.

Le cœur d'un projet Maven est un fichier nommé pom.xml (Project Object Model). Ce fichier XML décrit tout ce qui concerne votre projet : ses coordonnées, ses dépendances, et la manière de le construire.


2. Structure d'un projet Maven et le pom.xml

Quand Maven génère un projet, il crée une arborescence de dossiers standardisée. Cette convention est l'un des plus grands atouts de Maven, car elle permet à n'importe quel développeur familier avec l'outil de comprendre immédiatement la structure d'un nouveau projet.

  • src/main/java: Contient le code source de votre application.
  • src/main/resources: Pour les fichiers de configuration, les images, etc., qui doivent être inclus dans le livrable final.
  • src/test/java: Contient le code de vos tests unitaires.
  • target: Ce dossier est créé par Maven. Il contient les fichiers compilés (.class), le livrable final (par exemple, le fichier .jar), les rapports de test, etc.

Le pom.xml à la racine du projet est le "cerveau" de Maven. Il contient des informations cruciales.

Maven Architecture and POM File Interaction
Ce schéma illustre comment Maven interprète le fichier `pom.xml`. Il y lit les informations du projet, les dépendances nécessaires, et les instructions de build (cycle de vie, plugins). Sur cette base, il télécharge les dépendances dans un dépôt local et exécute les phases de construction demandées.

La vidéo suivante vous montre concrètement à quoi ressemble un projet Maven fraîchement créé.

Tutoriel Java - Maven

Cette section du tutoriel d'EvoluNoob montre la structure de dossiers et le fichier pom.xml générés par Maven.

Regardez la vidéo de 08:02 à 09:22. Identifiez les éléments clés : le fichier pom.xml à la racine, et l'arborescence src/main/java et src/test/java.

Les balises les plus importantes dans un pom.xml sont les "coordonnées" du projet, qui permettent de l'identifier de manière unique :

  • <groupId> : L'identifiant de votre organisation ou groupe. La convention est d'utiliser un nom de domaine inversé (ex: com.votreentreprise).
  • <artifactId> : L'identifiant de votre projet (ex: mon-super-projet).
  • <version> : La version du projet (ex: 1.0.0-SNAPSHOT). Le suffixe -SNAPSHOT indique une version de développement.

3. Le cycle de vie de construction (Build Lifecycle)

Le "cycle de vie" est le concept central de Maven. C'est une séquence définie de phases qui permettent de construire et distribuer un projet. L'exécution d'une phase entraîne automatiquement l'exécution de toutes les phases qui la précèdent.

Maven définit trois cycles de vie principaux :

  1. clean : Pour nettoyer le projet (supprime le répertoire target).
  2. default : Le cycle principal, qui gère la compilation, les tests, l'empaquetage (packaging) et le déploiement.
  3. site : Pour générer la documentation du projet.

Nous allons nous concentrer sur le cycle de vie default, qui est celui que vous utiliserez 99% du temps.

Les cycles de vie de Maven - Stop à la grosse confusion!

Cet article de Zerofiltre, "Les cycles de vie de Maven", démystifie très bien la distinction entre les cycles de vie et les phases. C'est une lecture rapide et très éclairante.

Lisez l'article jusqu'à la section "Cycle de vie default". Concentrez-vous sur la définition des 3 cycles de vie et la liste détaillée des phases du cycle default.

Voici les phases les plus courantes du cycle default, dans l'ordre :

Phase Description Commande Maven
validate Valide que le projet est correct et que toutes les informations sont disponibles. mvn validate
compile Compile le code source du projet (les fichiers .java deviennent des .class). mvn compile
test Exécute les tests unitaires avec un framework approprié (ex: JUnit). mvn test
package Prend le code compilé et l'empaquette dans son format distribuable (ex: un .jar). mvn package
verify Exécute des contrôles pour vérifier que le paquet est valide. mvn verify
install Installe le paquet dans le dépôt local, pour l'utiliser comme dépendance dans d'autres projets. mvn install
deploy Copie le paquet final dans un dépôt distant (partagé avec d'autres développeurs). mvn deploy

Le point crucial est que si vous exécutez mvn package, Maven exécutera automatiquement validate, compile, et test avant.

Maven Lifecycle Phases and Plugins
Ce diagramme visualise la séquence des phases du cycle de vie et montre comment elles sont associées à des "plugins". Par exemple, la phase `compile` est exécutée par le `maven-compiler-plugin`, et la phase `test` par le `maven-surefire-plugin`. Le `pom.xml` sert à configurer ces plugins.

4. Maven en pratique : construire un projet et gérer les dépendances

Passons maintenant à la pratique. La théorie est importante, mais voir Maven en action est la meilleure façon de comprendre.

4.1. Exécuter les phases du cycle de vie

La vidéo ci-dessous montre comment utiliser les commandes Maven pour compiler, empaqueter et exécuter une application simple.

Tutoriel Java - Maven

Cette démonstration pratique du tutoriel d'EvoluNoob vous montre comment utiliser les commandes Maven pour construire et lancer une application.

Regardez la vidéo de 15:29 à 18:13. Observez attentivement les étapes suivantes : L'utilisation de mvn package pour compiler le code, exécuter les tests et créer le fichier JAR dans le dossier target. L'utilisation de la commande java -cp target/... pour exécuter le programme à partir du JAR généré. Comment la modification du code source nécessite simplement de relancer mvn package pour reconstruire le projet.

4.2. Gérer les dépendances et les plugins

C'est ici que la magie de Maven opère. Pour ajouter une bibliothèque externe (une "dépendance"), il suffit de la déclarer dans la section <dependencies> du pom.xml. Maven se chargera de la télécharger depuis un dépôt central (le plus connu étant Maven Central Repository) et de la rendre disponible pour votre projet.

Le cas pratique suivant est extrêmement courant : par défaut, Maven peut utiliser une ancienne version de Java pour compiler votre projet. Nous allons voir comment corriger cela en configurant le maven-compiler-plugin.

maven la structure d'un projet Java

Cette vidéo de Tuto De Rien aborde un problème très concret : forcer Maven à utiliser une version de Java spécifique (ici, Java 11). C'est un excellent exemple de l'utilisation d'un plugin pour configurer le processus de construction.

Regardez la vidéo de 06:08 à 14:25. C'est une section dense mais très instructive. Le problème (06:08 - 09:04) : L'auteur utilise une syntaxe Java moderne (streams, lambdas) et le code ne compile pas car Maven utilise une version de Java trop ancienne par défaut (Java 5). La solution (09:04 - 13:50) : Il ajoute un bloc <build><plugins>...</plugins> au pom.xml pour configurer le maven-compiler-plugin et lui spécifier la version de Java à utiliser (ici, la version 11). Le résultat (13:50 - 14:25) : Après avoir rechargé la configuration Maven dans l'IDE, le projet compile et s'exécute correctement.

Cette manipulation est fondamentale. En tant que développeur, vous passerez beaucoup de temps dans le pom.xml pour ajouter des dépendances (comme Spring Boot, des connecteurs de base de données, etc.) et configurer des plugins pour adapter le processus de construction à vos besoins.

À vous de jouer :

  1. Créez un nouveau projet Maven dans IntelliJ IDEA (File > New > Project... et choisissez Maven).

  2. Assurez-vous que votre projet est configuré pour Java 17 (nous l'avons installé dans une leçon précédente).

  3. Dans votre pom.xml, ajoutez le bloc de configuration du maven-compiler-plugin vu dans la vidéo, en remplaçant la version 11 par 17 :

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version> <!-- Une version récente et stable -->
                <configuration>
                    <release>17</release>
                </configuration>
            </plugin>
        </plugins>
    </build>
    
  4. IntelliJ devrait vous proposer de recharger la configuration Maven. Acceptez. Votre projet est maintenant configuré pour compiler avec Java 17.


Conclusion

Félicitations ! Vous venez d'acquérir une compétence fondamentale de l'écosystème Java. Maven peut sembler intimidant au début, mais il deviendra rapidement votre meilleur allié pour gérer des projets de toute taille.

Points clés à retenir :

  • Maven standardise la structure, la gestion des dépendances et le cycle de vie des projets Java.
  • Le pom.xml est le fichier central qui décrit le projet et sa configuration.
  • La structure de dossiers (src/main/java, src/test/java, target) est une convention à respecter.
  • Le cycle de vie est une séquence de phases (compile, test, package, install) qui s'exécutent dans un ordre précis.
  • Les dépendances sont gérées en les déclarant dans le pom.xml, et Maven les télécharge depuis des dépôts.
  • Les plugins sont utilisés pour exécuter les tâches de chaque phase et peuvent être configurés dans le pom.xml.

Dans la prochaine leçon, nous allons enfin plonger dans le monde de Spring Boot. Nous verrons comment initialiser un projet Spring Boot avec Spring Initializr. Vous constaterez que cet outil génère pour nous un projet Maven complet et pré-configuré, prêt à l'emploi. La leçon d'aujourd'hui vous a donné toutes les clés pour comprendre ce qui se passera sous le capot.