Outil de gestion et d'automatisation de build Java
Réalisé par: Encadré par:
• RHIATE Ayoub • Mme. BOUGROUN Zineb
• MOUSTAGHIT Souhail
• LEMRANI Moad
Atelier DevOps
Qu'est-ce que Maven ?
Automatisation
Définition Compile, teste, package et déploie
automatiquement.
Maven est un outil open-source développé par
Apache, conçu pour automatiser et standardiser le
Dépendances
cycle de construction (build) des projets Java.
Télécharge les bibliothèques nécessaires depuis
des dépôts.
Il repose sur le concept de Convention over
Configuration : en suivant une structure de projet Convention
standard, Maven sait comment compiler, tester et Structure de projet standardisée reconnue par tous
les IDE.
packager sans qu'on le lui indique explicitement.
Plugins
Extensible via des centaines de plugins disponibles.
Historique de Maven
2002 2003 2005 2010 2023
Origine Maven 1.0 Maven 2.0 Maven 3.0 Maven 4.0
Maven naît au sein Première version Réécriture Meilleures Nouveau format
du projet Jakarta officielle. Concept complète, non performances, POM (build POM vs
d'Apache comme de POM introduit. rétrocompatible. meilleure consumer POM),
sous-composant Gestion basique Lifecycles, compatibilité Maven meilleure gestion
du projet Turbine. des dépendances. conventions de 2. Validation POM multi-modules, API
structure, dépôt renforcée. Version améliorée.
central. Version encore très utilisée.
adoptée
massivement.
Maven vs Ant
Apache Ant Apache Maven
• Outil d'automatisation de tâches (build
• Outil de gestion de projet complet
scripting)
• Configuration impérative via [Link] • Configuration déclarative via [Link]
• Très flexible : on décrit COMMENT faire • Décrit QUOI faire
VS
• Pas de gestion native des dépendances • Gestion automatique des dépendances
• Pas de conventions de structure • Structure standard imposée par défaut
• Antérieur à Maven (2000) • Inclut les fonctionnalités d'Ant et bien plus
Le fichier POM (Project Object Model)
Le [Link] est le cœur de tout projet Maven. Il [Link]
décrit le projet et sa configuration de manière
<project>
déclarative. <modelVersion>4.0.0</modelVersion>
Identité (GAV) Packaging
<groupId>[Link]</groupId>
• groupId : [Link] • jar (défaut) <artifactId>mon-projet</artifactId>
<version>1.0.0</version>
• artifactId : mon-projet • war, ear, pom <packaging>jar</packaging>
• version : 1.0.0
<dependencies>
<dependency>
Dépendances Build & Plugins <groupId>junit</groupId>
<artifactId>junit</artifactId>
• <dependencies> • <build> <version>4.13</version>
• scope : compile, <scope>test</scope>
• <plugins>
test... </dependency>
</dependencies>
</project>
Héritage du POM
Concept Super POM — fourni par Maven
Tout POM hérite implicitement d'un Super POM Définit les valeurs par défaut héritées par tous les
fourni par Maven, même sans le déclarer. projets Maven :
▸ Le dépôt Maven Central comme source de
On peut aussi créer un POM Parent personnalisé dépendances
pour mutualiser la configuration entre plusieurs ▸ Le répertoire target/ comme sortie du build
modules d'un même projet. ▸ La structure standard de répertoires src/main/java...
▸ Les plugins par défaut (compiler, surefire, jar...)
Hiérarchie d'héritage et déclaration :
[Link] — déclaration d'un POM Parent
POM Parent
optionnel, défini par l'équipe <project>
<parent>
<groupId>[Link]</groupId>
<artifactId>parent-projet</artifactId>
<version>1.0.0</version>
[Link] </parent>
votre projet <!-- hérite : dépendances, plugins, propriétés -->
</project>
Coordonnées GAV : Identifier un artefact
G groupId A artifactId V version
Identifie l'organisation ou le projet Nom unique du module au sein du Version du projet.
racine. groupe. Format : [Link]
Convention : même format qu'un En minuscules, sans espace ni SNAPSHOT = version en cours de
nom de package Java inversé. caractère spécial. développement.
Exemple : Exemple : Exemple :
[Link] spring-core 5.3.29
groupId : artifactId : version → [Link] : spring-core : 5.3.29
Gestion des dépendances & Scopes
Portée par défaut. Disponible à la compilation, aux tests et à l'exécution. Incluse dans le
compile
package final.
test Uniquement pour les tests (JUnit, Mockito…). Non incluse dans le package déployé.
provided Nécessaire à la compilation mais fournie par le conteneur (ex: servlet-api dans Tomcat).
runtime Non nécessaire à la compilation, mais requise à l'exécution (ex: driver JDBC).
system Similaire à provided, mais le chemin JAR doit être fourni explicitement. Déconseillé.
Dépôts Maven: Local, Central et Distant
Dépôt Local Maven Central Dépôt Distant Privé
~/.m2/repository/ [Link] Nexus / Artifactory
Cache local sur votre machine. Dépôt public géré par Sonatype. Dépôt hébergé en entreprise.
Maven y cherche les dépendances Des centaines de milliers de Partage des artefacts internes et
en premier avant tout accès bibliotheques Java open-source proxifie Maven Central.
réseau. disponibles.
Controle total des versions
Acces hors-ligne possible Dépôt par defaut de Maven Sécurité et audit des artefacts
Évite les téléchargements répétés Accessible sans configuration
Algorithme de résolution des dépendances :
1 2 3 4
Lecture Verif. Télécharge Mise en cache
du [Link] Dépôt local Maven Central dans ~/.m2
Si la dépendance n'est pas dans le dépôt local, Maven la télécharge automatiquement depuis Maven Central et la met en cache pour les prochains builds.
Structure standard de répertoires
mon-projet/
src/main/java Code source de l'application
[Link]
src/
main/ Fichiers de config
src/main/resources
java/ ← Sources Java ([Link]…)
resources/ ← Config, XML…
webapp/ ← Web (WAR) Contenu web pour les projets
src/main/webapp
test/ WAR (JSP, WEB-INF…)
java/ ← Tests unitaires
resources/ ← Resources tests Classes de tests unitaires
src/test/java
target/ ← Générés par Maven (JUnit, TestNG…)
classes/
[Link] Resources utilisées
src/test/resources
uniquement lors des tests
Répertoire de sortie généré
target/
automatiquement par Maven
Les Archetypes
Maven
Générer des projets en quelques secondes
Archetypes Maven : Concept
Un archetype est un template de projet Maven. Il permet de générer automatiquement la structure
complète d'un nouveau projet (répertoires, [Link], classes de base) à partir d'un modèle prédéfini.
Commande de génération :
mvn archetype:generate \
-DgroupId=[Link] -DartifactId=mon-projet \
-DarchetypeArtifactId=maven-archetype-quickstart \
-DinteractiveMode=false
Archetypes les plus utilisés :
maven-archetype-quickstart maven-archetype-webapp maven-archetype-j2ee-simple
Application Java simple avec classe Application Web Java (WAR) avec
Projet J2EE multi-modules de base
Main et test JUnit structure JSP/Servlet
Build
Lifecycle
Comprendre comment Maven construit votre projet
Les 3 Build Lifecycles de Maven
default clean site
Le lifecycle principal. Gère la Génère la documentation du projet
Supprime tous les fichiers et
construction complète du projet : sous forme de site HTML (Javadoc,
répertoires générés lors du build
compilation, test, packaging et rapports de tests, métriques de
précédent (le répertoire target/).
déploiement. code…).
Phases : Phases : Phases :
validate → compile → test → package pre-site → site → post-site → site-
pre-clean → clean → post-clean
→ verify → install → deploy deploy
mvn package
mvn clean mvn site
mvn install
mvn clean install mvn site-deploy
mvn deploy
Lifecycle default : Phases détaillées
Vérifie que le [Link] est correct et que toutes les informations
validate mvn validate
nécessaires sont disponibles.
compile mvn compile Compile les sources Java (.java → .class) dans target/classes.
Exécute les tests unitaires (JUnit/TestNG). Le build échoue si un test
test mvn test
échoue.
package mvn package Empaquète le projet compilé (JAR, WAR…) dans target/.
verify mvn verify Lance les tests d'intégration et vérifie la qualité du package.
install mvn install Installe le package dans votre dépôt Maven local (~/.m2/repository).
deploy mvn deploy Publie le package sur un dépôt distant (Nexus, Artifactory…).
⚠ Chaque phase exécute toutes les phases précédentes ! mvn package → validate + compile + test + package
Phases, Goals & Plugins
Lifecycle Phase Plugin Plugin Goal
Une étape dans un lifecycle (ex: Unité d'extension Maven qui fournit Une action spécifique réalisée par
compile, test, package). Lancer un ou plusieurs goals. Chaque goal un plugin (ex: compiler:compile).
une phase exécute toutes les peut être lié à une ou plusieurs Plus précis qu'une phase: exécute
phases précédentes. phases du lifecycle. uniquement ce goal.
mvn compile maven-compiler-plugin mvn compiler:compile
Plugins essentiels à connaître :
→ compile les sources Java, → exécute les tests unitaires
maven-compiler-plugin maven-surefire-plugin
configure la version JDK JUnit/TestNG
→ crée le fichier JAR final du → crée le fichier WAR pour
maven-jar-plugin maven-war-plugin
projet les applications web
Commandes essentielles
mvn archetype:generate mvn compile
Créer un nouveau projet depuis un archetype Compiler les sources uniquement
mvn test mvn package
Compiler et exécuter les tests unitaires Compiler, tester et créer le JAR/WAR
mvn install mvn clean
Package + installation dans le dépôt local Supprimer le répertoire target/
mvn clean install mvn clean install -DskipTests
Nettoyage complet puis build Build sans exécuter les tests (déconseillé)
Merci pour votre
attention!
Ce qu'il faut retenir
01 Maven automatise tout le cycle de vie d'un projet Java grâce au fichier [Link].
02 La syntaxe GAV (groupId:artifactId:version) identifie de façon unique tout artefact Maven.
03 Les scopes de dépendances contrôlent leur présence à la compilation, aux tests et à l'exécution.
04 Les archetypes permettent de bootstrapper un projet en une seule commande.
05 Les 3 lifecycles (default, clean, site) sont composés de phases séquentielles liées à des plugins.