Réaliser par : EL Ouadih Ossama
01 Introduction
02 Concepts fondamentaux 05 Les plugins Maven
03 Installation et configuration Contenu 06 Gestion des dépendances dans Maven
04 Cycle de vie et phases de Maven 07 Archetypes
Introduction
• C’est quoi Maven ?
• Outil de construction (Build tool) et cycle de vie
• Outil de gestion des dépendances
• Gestion du projet
• Intégration avec CLI et IDE
OUTILS DE CONSTRUCTION ‘Build tool’
•Crée des artefacts déployables à partir du code source
•Constructions automatisées et reproductibles
•Déploiement des artefacts sur les serveurs
•Indépendance par rapport aux IDE
•Intégration avec d'autres outils de construction
GESTION DES DÉPENDANCES
•Téléchargement des dépendances du projet depuis
des dépôts centralisés
•Résolution automatique des bibliothèques
nécessaires aux dépendances du projet
•Définition de la portée des dépendances
GESTION DE PROJET
•Gestion des versions des artefacts
•Journaux des modifications (Change logs)
•Documentation
•Génération de Javadocs
•Rapports
Concepts de base
Project Object Model (POM)
•Décrit, configure et personnalise un projet Maven
•Maven lit le fichier pom.xml pour construire le projet
•Définit "l'adresse" de l'artefact du projet grâce à un système de
coordonnées
•Spécifie les informations du projet, les plugins, les objectifs
(goals), les dépendances et les profils
RÉPERTOIRES
•Contiennent des artefacts de construction et des dépendances de différents
types
•Répertoires locaux : Cache local des dépendances
•Répertoires distants : Sources externes pour récupérer les dépendances
•Le Répertoire Central : Répertoire centralisé par défaut pour Maven
Remarque : Le répertoire local a la priorité lors de la résolution des
dépendances
Plugins et Goals
•Un plugin est une collection goals
•Exemple : le plugin de compilation (compiler plugin)
•Les goals réalisent les actions dans les constructions Maven
•Tout le travail dans Maven est effectué via des plugins et des Goals
•Les plugins et Goals peuvent être appelés indépendamment ou dans
le cadre d'une phase du cycle de vie
CYCLE DE VIE ET PHASES
•Un cycle de vie est une séquence de phases nommées
•Les phases sont exécutées de manière séquentielle
•3 cycles de vie principaux :
1.Clean : Nettoie les fichiers générés par les builds précédents
2.Default : Gestion des phases principales (compilation, test, empaquetage, etc.)
3.Site : Génère la documentation du projet
•Exécuter une phase implique également l'exécution de toutes les phases
précédentes
Installation de Maven
Étapes pour installer Apache Maven :
1. Prérequis :
• Java doit être installé et configuré (JDK 8 ou supérieur).
• Configurez la variable d’environnement JAVA_HOME pointant vers le répertoire d’installation de Java.
1. Téléchargement :
• Rendez-vous sur le site officiel d’Apache Maven : https://maven.apache.org.
• Téléchargez la version binaire appropriée pour votre système d’exploitation.
2. Décompression :
• Extrayez le fichier téléchargé dans un répertoire, par exemple
• C:\Program Files\Apache\Maven (Windows) ou /usr/local/apache-maven (Linux/Mac).
Installation de Maven
Configuration des variables d’environnement :
•Ajoutez le chemin du répertoire bin de Maven à la variable d’environnement PATH.
•Accédez à Paramètres système avancés > Variables d’environnement.
•Ajoutez une nouvelle variable nommée MAVEN_HOME avec le chemin de Maven.
•Ajoutez %MAVEN_HOME%\bin à la variable PATH.
Vérification de l’installation
Cycles de vie
Dans Maven, il existe trois cycles de vie intégrés :
default, clean et site. Toutes les opérations Maven
font partie de l'un de ces cycles de vie. La
classification de ces trois cycles de vie est basée sur
l'opération effectuée.
•default : Gère le déploiement du projet.
•clean : Gère le nettoyage du projet.
•site : Gère la documentation du site du projet.
Default Lifecycle
Le cycle de vie par défaut gère le déploiement du projet. Un cycle de vie peut être divisé
en différentes étapes appelées phases. Le cycle de vie par défaut contient 23 phases, voici
les plus courantes :
•compile : Compilation des sources du projet.
•test : Exécution des tests générés à l'aide d'un cadre de tests unitaires comme JUnit.
•package : Emballage du projet dans un format distribué comme JAR, WAR ou EAR.
•install : Installation du paquet dans le dépôt local.
•deploy : Copie de la version finale du build dans un dépôt distant.
Clean et Site Lifecycle
Le cycle de vie clean gère le nettoyage du projet. Il Le cycle de vie site gère la documentation du site du
est composé des phases suivantes : projet. Il est composé des phases suivantes :
•pre-clean : Préparation du nettoyage du projet. •pre-site : Exécution des processus avant la
•clean : Suppression de tous les fichiers générés lors génération du site du projet.
du build précédent. •site : Génération de la documentation du site du
•post-clean : Finalisation du processus de nettoyage. projet.
•post-site : Finalisation de la génération du site et
préparation pour le déploiement.
•site-deploy : Déploiement de la documentation sur
un serveur web.
Plugins
Les plugins dans Maven permettent d’exécuter des tâches
spécifiques telles que la compilation,
les tests ou la génération de fichiers. Chaque plugin contient
des goals (objectifs),
qui sont des actions précises à réaliser.
Par exemple, le plugin de compilation inclut le goal compile
pour compiler le code source.
Ces plugins et goals sont essentiels pour automatiser et
personnaliser les différentes
étapes du cycle de vie d’un projet Maven.
Compiler Plugins
<plugin>
• Le Maven Compiler Plugin est un plugin central qui
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
compile les sources Java d'un projet. Il garantit que votre <version>3.8.1</version>
<configuration>
code Java est compatible avec la version spécifiée de
<source>1.8</source>
Java et qu'il peut être compilé et exécuté sans problème. <target>1.8</target>
</configuration>
</plugin>
Surefire Plugin
Le Maven Surefire Plugin est utilisé pour exécuter des tests <plugin>
<groupId>org.apache.maven.plugins</groupId>
unitaires et générer des rapports de tests. Il prend en charge
<artifactId>maven-surefire-plugin</artifactId>
des frameworks de test populaires tels que JUnit et TestNG. <version>3.0.0-M5</version>
</plugin>
FindBugs Plugin
Le Maven FindBugs Plugin est un outil d’analyse statique
<plugin>
qui détecte les bogues potentiels et les problèmes dans <groupId>org.codehaus.mojo</groupId>
votre code Java. Il génère un rapport détaillant les <artifactId>findbugs-maven-plugin</artifactId>
<version>3.0.5</version>
problèmes identifiés, aidant ainsi les développeurs à </plugin>
améliorer la qualité du code.
Maven Failsafe Plugin
<plugin>
Le Maven Failsafe Plugin est conçu pour exécuter
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
des tests d'intégration. Il garantit que la construction du
<version>3.0.0-M5</version>
<executions>
projet se poursuit même si certains tests échouent,
<execution>
<goals>
permettant aux développeurs de résoudre les
<goal>integration-test</goal>
<goal>verify</goal>
problèmes après le processus de construction.
</goals>
</execution>
</executions>
</plugin>
Dependency Plugin
Le Maven Dependency Plugin aide à gérer les <plugin>
dépendances de votre projet en fournissant des <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
tâches utiles, telles que l'analyse, la copie et <version>3.1.2</version>
l'extraction des dépendances. pour éviter les </plugin>
conflits de dépendances
Javadoc Plugin
<plugin>
Le Maven Javadoc Plugin génère la documentation API <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
pour votre projet Java en utilisant Javadoc. Cela est utile <version>3.3.0</version>
<configuration>
à la fois pour les développeurs internes et externes qui <show>private</show>
<nohelp>true</nohelp>
ont besoin de comprendre comment interagir avec la </configuration>
</plugin>
base de code de votre application.
Gestion des Dépendances
•Apprenez les bases de la gestion des dépendances
•Découvrez la gestion des dépendances transitives
•Connectez-vous à des dépôts distants alternatifs
•Comprenez la portée (Scope) des dépendances
Syntaxe de base
Les dépendances sont des bibliothèques ou des <dependencies>
<dependency>
modules externes nécessaires à un projet pour être <groupId>org.apache.commons</groupId>
compilé, testé et exécuté avec succès. <artifactId>commons-lang3</artifactId>
<version>3.12.0</version>
</dependency>
Dans Maven, les dépendances sont déclarées dans le <dependency>
<groupId>junit</groupId>
fichier Project Object Model (POM) à l'aide de la <artifactId>junit</artifactId>
syntaxe XML. <version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
Dépendances Transitive
Maven prend en charge les dépendances <dependency>
<groupId>org.apache.commons</groupId>
transitives, ce qui signifie que si un projet <artifactId>commons-lang3</artifactId>
dépend d'une bibliothèque A, qui elle-même <version>3.12.0</version>
</dependency>
dépend des bibliothèques B et C, Maven
inclut automatiquement B et C comme
dépendances. Project A
Les dépendances transitives simplifient la └── Apache Commons Lang 3.12.0
└── Apache Commons Codec 1.15
gestion des dépendances en réduisant le
besoin de déclarer explicitement chaque
bibliothèque requise.
Scope
Maven propose différentes portées de dépendances pour contrôler la
visibilité des dépendances pendant le processus de construction. <dependency>
<groupId> org.slf4j</groupId>
Les portées de dépendances les plus courantes sont : <artifactId> slf4j-api</artifactId>
<version> 1.7.32</version>
•compile : C'est la portée par défaut, utilisée pour les dépendances <scope> runtime </scope>
nécessaires à la fois à la compilation et à l'exécution du projet. </dependency>
•test : Les dépendances sont utilisées uniquement pour compiler et <dependency>
exécuter les tests. <groupId> javax.servlet</groupId>
<artifactId>javax.servletapi
•runtime : Les dépendances requises pour l'exécution du projet, mais </artifactId>
qui ne sont pas nécessaires pour la compilation. <version> 4.0.1</version>
<scope> provided </scope>
•provided : Les dépendances fournies par l'environnement d'exécution </dependency>
(par exemple, un serveur d'application)
Exclusion des Dépendances
Dans certains scénarios, il peut être nécessaire <dependencies>
d'exclure des dépendances transitives spécifiques <dependency>
pour résoudre des conflits ou éviter l'inclusion de <groupId>com.example</groupId>
bibliothèques inutiles. <artifactId>library-x</artifactId>
<version>1.0</version>
<exclusions>
Supposons que le Projet A dépende de la <exclusion>
bibliothèque X, qui dépend de manière transitive de <groupId>com.example</groupId>
la bibliothèque Y. Cependant, le Projet A nécessite <artifactId>library-y</artifactId>
une version différente de la bibliothèque Y, donc </exclusion>
nous l'excluons des dépendances transitives : </exclusions>
</dependency>
</dependencies>
médiation des dépendances
Supposons maintenant que dependency-a et dependency-b
dépendent de manière transitive d'une bibliothèque commune, <dependencies>
appelons-la common-library, mais elles spécifient des versions <!-- Dependency A nécessite la version 1.0
différentes : de transitive dependency -->
<dependency>
•dependency-a nécessite la version 1.0 de common-library. <groupId>com.example</groupId>
•dependency-b nécessite la version 2.0 de common-library. <artifactId>dependency-a</artifactId>
<version>1.0</version>
Lorsque Maven résout les dépendances, il rencontre ce conflit. Le </dependency>
mécanisme de médiation des dépendances de Maven intervient <!-- Dependency B nécessite la version 2.0
pour résoudre ce conflit en sélectionnant la version qui satisfait du même transitive dependency -->
au mieux toutes les exigences. <dependency>
<groupId>com.example</groupId>
<artifactId>dependency-b</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
Archetypes
Les Maven archetypes (ou archétypes
Maven) sont des modèles de projets
prédéfinis utilisés dans Maven, un outil de
gestion de dépendances et de construction
pour Java. Ils servent de base pour créer
rapidement des projets avec une structure
standardisée.
Types des archetypes :
• maven-archetype-quickstart : Crée un projet Java simple avec une
structure minimale.
• maven-archetype-webapp : Crée la structure de base pour une application
• web Java.maven-archetype-jpa : Structure de projet adaptée aux
applications utilisant Java Persistence API
……..
Avantages :
•Gain de temps : La structure de projet est
automatiquement générée.
•Standardisation : Assure une cohérence dans les projets au
sein d'une organisation.
•Flexibilité : Peut être personnalisé pour différents types de
projets.
générer un projet avec Maven Archetype
Ouvrir un terminal ou un invite de commande.
Lancer la commande suivante :
mvn archetype:generate DgroupId=com.example -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
-DgroupId=com.example : Identifiant de groupe unique, généralement le domaine inversé de votre
organisation.
-DartifactId=my-app : Nom du projet ou module (dossier généré).
-DarchetypeArtifactId=maven-archetype-quickstart : L'archétype utilisé (ici, pour un projet Java minimal).
-DinteractiveMode=false : Désactive le mode interactif (pour ne pas avoir à répondre à des questions lors de
l'exécution).
Conclusion
Maven est un outil incontournable pour
simplifier la gestion, la construction et les
dépendances des projets Java. Il optimise la
productivité des développeurs grâce à sa
standardisation et ses fonctionnalités
puissantes.