Maven
Youssef Saadi
Master Informatique Décisionnelle
Faculté Des Sciences Et Techniques
Université Sultan Moulay Slimane Béni Mellal
AU: 2022/2023
Introduction
Maven : outils de construction automatique de logicielle (Build)
Build :
Compilation exécution des Test Packaging (jar;war) Déploiement
Maven : Convention/Configuration
mvn install:
• Compile src/main/java
archetypes
• Run Test src/test/java
• If test passes package application into jar/war file
Standalone webapp ear …
2 Maven (Youssef Saadi / v2.0)
Avantages
Interface de développement et de construction commune pour tous les
développeurs
Gestion des dépendances
Repository ensemble d’artefacts (composants logiciel) déployés sur des
serveurs de repository
Maven utilise des plugins pour exécuter les tâches requises
Plugin model : compiler ; surfire (test) ; wsimport (webservice)
3 Maven (Youssef Saadi / v2.0)
Plugins vs Goals
Plugin : collection d’un ou plusieurs « goals »
archetype: generate Le « plugin » archetype contient le « goal » generate
install:install Le plugin install contient le goal install
Un goal est une tâche spécifique :
Compile : compile les fichiers source et les fichiers de test
Test : exécute les tests
Package : va générer le livrable du projet dans un jar/war après avoir compilé
les fichiers sources et après que les tests passent avec succès.
Les « goals » peuvent disposer de paramètres à spécifier après -D
4 Maven (Youssef Saadi / v2.0)
Plugins vs Goals
Maven utilise plusieurs plugin pour son fonctionnement :
Par exemple, il utilise les plugin compiler; jar; ..
Ces plugins, on pourra les personnaliser (override) dans pom.xml
Maven Goals définissent des étapes séquentielles
mvn install : 1- process-resources 2- compile 3- test 4- package 5-dépôt sur
maven repository (local ou distant)
process-resources est associé à resources:resources
compile est associé à compiler:compiler
test est associé à surfire:test
package est associé à jar:jar où war:war
5 Maven (Youssef Saadi / v2.0)
Les coordonnées Maven
groupId – artefactId – version – packaging
groupId: com.oracle; com.youssadi
artefactId: nom du projet
version : 1.0-SNAPSHOT; 1.0; 2.1
packaging : jar; war
6 Maven (Youssef Saadi / v2.0)
Les dépôt de Maven
Quand on lance la commande « mvn install » pour la première fois:
Téléchargement d’un ensemble de plugins et de dépendances depuis le
dépôt central de Maven: https://repo.maven.apache.org/maven2/
On pourra utiliser d’autres serveur de
dépôt commerciaux pour déposer
et télécharger certains artefact. (on parle de
dépôt miroir) nexus
Maven crée aussi un dépôt local: pour ne pas
télécharger à chaque fois les dépendance
quand on lance la commande mvn install.
C:\Users\{user}\.m2
7 Maven (Youssef Saadi / v2.0)
Installation
Télécharger apache maven
https://maven.apache.org/download.cgi
Ajouter la variable d’environnement M2_HOME
Et l’ajouter au « path system »
8 Maven (Youssef Saadi / v2.0)
Le contenu de Maven
Le dépôt local
9 Maven (Youssef Saadi / v2.0)
Création d’un projet java standalone
En ligne de commande
10 Maven (Youssef Saadi / v2.0)
Création d’un projet java standalone
11 Maven (Youssef Saadi / v2.0)
Construction d’un projet java standalone
mvn install
12 Maven (Youssef Saadi / v2.0)
Le pom.xml
13 Maven (Youssef Saadi / v2.0)
Modification de l’environnement de compilation et
exécution
mvn clean install -U
14 Maven (Youssef Saadi / v2.0)
Le dépôt par défaut
15 Maven (Youssef Saadi / v2.0)
La structure du projet Maven créé
16 Maven (Youssef Saadi / v2.0)
Exécution du projet
17 Maven (Youssef Saadi / v2.0)
Maven-Eclipse IDE
File New Other maven maven project
18 Maven (Youssef Saadi / v2.0)
Création d’un projet standalone
Eclipse
19 Maven (Youssef Saadi / v2.0)
Création d’un projet standalone
Penser à mettre à jour le
projet maven:
• Clic droit sur le projet
• Maven update
20 Maven (Youssef Saadi / v2.0)
Ajout d’une implémentation JPA
Ajout de dépendance hibernate
Ajout de dépendance pour le connecteur de mysql
Ajout de jaxb
Configuration du fichier persistence.xml
21 Maven (Youssef Saadi / v2.0)
Ajout de JAXB (Parseur XML)
22 Maven (Youssef Saadi / v2.0)
La classe du Domaine
23 Maven (Youssef Saadi / v2.0)
Les classes DAO
24 Maven (Youssef Saadi / v2.0)
Les classes de service
25 Maven (Youssef Saadi / v2.0)
Test du service
Click droit sur le project New other java junit
26 Maven (Youssef Saadi / v2.0)
Test du service
27 Maven (Youssef Saadi / v2.0)
Test du service
Run As Maven Test
28 Maven (Youssef Saadi / v2.0)
Test du service
29 Maven (Youssef Saadi / v2.0)
Éviter les tests durant la construction du projet
En ligne de commande : mvn install –DskipTests
Dans Eclipse:
Run As
Run Configurations
maven build
30 Maven (Youssef Saadi / v2.0)
Gestion des dépendances
Supposant que notre projet a besoin d’utiliser les fonctionnalités du
framework spring. Nous avons besoin par exemple de spring context
Chercher les dépendances
maven de spring context
Les ajouter à pom.xml
Sauvegarder votre fichier
31 Maven (Youssef Saadi / v2.0)
Gestion des dépendances
32 Maven (Youssef Saadi / v2.0)
Gestion des dépendances
33 Maven (Youssef Saadi / v2.0)
Création du projet web
New project maven project
34 Maven (Youssef Saadi / v2.0)
Ajout des dépendances de l’API Servlet
35 Maven (Youssef Saadi / v2.0)
pom.xml archetype:web
Modification de la section build
36 Maven (Youssef Saadi / v2.0)
Création de la servlet addProductServlet
37 Maven (Youssef Saadi / v2.0)
La Servlet d’ajout de produit
38 Maven (Youssef Saadi / v2.0)
Le formulaire d’ajout
39 Maven (Youssef Saadi / v2.0)
Association des Projets Multi Modules
Créer un répertoire parent product-parent
Créer un descripteur parent pom.xml dans le dossier product-parent
Inclure les projets maven enfant dans le dossier product-parent
Modification de leurs descripteurs pom.xml pour qu’ils deviennent des
modules enfant du projet parent.
40 Maven (Youssef Saadi / v2.0)
pom.xml du projet parent
41 Maven (Youssef Saadi / v2.0)
Les modules maven
pom.xml du projet
product-web
pom.xml du projet
product-service
42 Maven (Youssef Saadi / v2.0)
Projet Parent
Suppression des projets
d’Eclipse
Importation du projet
parent depuis les
projets maven existents
43 Maven (Youssef Saadi / v2.0)
Construction du Projet parent
Run As Maven Clean
Run As Maven Install
Les deux projets service et web sont incluse dans le dépôt local
44 Maven (Youssef Saadi / v2.0)
Gestion des dépendance
Le projet product-web dépend du projet product-service
Dans le pom.xml du projet web on ajoute:
Run As Maven Clean & Install
45 Maven (Youssef Saadi / v2.0)
Modification de la servlet
46 Maven (Youssef Saadi / v2.0)
Exécution
47 Maven (Youssef Saadi / v2.0)
Scope
compile : la dépendance est utilisable par toutes les phases et à l'exécution. C'est le
scope par défaut
provided : la dépendance est utilisée pour la compilation mais elle ne sera pas
déployée car elle est considérée comme étant fournie par l'environnement d'exécution.
C'est par exemple le cas des API fournies par un serveur d'applications
runtime : la dépendance n'est pas utile pour la compilation mais elle est nécessaire à
l'exécution. C'est par exemple le cas des pilotes JDBC
test : la dépendance n'est utilisée que lors de la compilation et de l'exécution des tests.
C'est par exemple le cas pour la bibliothèque utilisée pour les tests unitaires (JUnit ou
TestNG pas exemple) ou pour les doublures (Easymock, Mockito, ...)
system : la dépendance dépend du système d’exploitation et l’on doit fournir son
chemin sur le disque.
Import : la dépendance est utilisé dans le projet pom (non jar et non war)
48 Maven (Youssef Saadi / v2.0)
Scope
49 Maven (Youssef Saadi / v2.0)
Dependency managment
S’assurer que tous les projets enfant (la personnalisation est toujours
possible) partagent les mêmes versions des dépendances communes.
Nous allons prendre l’exemple de Junit
Dans le pom.xml du projet parent on
ajoute:
On enlève la version
des dépendances gérées
50 Maven (Youssef Saadi / v2.0)
Dependency managment
Aussi dans les pom.xml des projets enfant, on enlève le tag de version:
51 Maven (Youssef Saadi / v2.0)
Plugin Management
On s’intéresse au plugin compiler
On modifie le pom.xml du projet parent
52 Maven (Youssef Saadi / v2.0)
Plugin Management
On modifie les pom.xml des projets enfant
product-web product-service
53 Maven (Youssef Saadi / v2.0)
Les profiles
Une application d’entreprise est souvent exécutée dans différents
environnement
Développement Environnement :
Serveur de déploiement
Test
Serveur de BD
Production
…
Dev
Application Test
Prod
54 Maven (Youssef Saadi / v2.0)
Les profiles
55 Maven (Youssef Saadi / v2.0)
Les profiles
56 Maven (Youssef Saadi / v2.0)
Les profiles – pom.xml
57 Maven (Youssef Saadi / v2.0)
Activation d’un profile le profil Test
En ligne de commande:
mvn install –ptest (ou –pdev ou –pprod)
Sur eclipse : Click droit sur le projet properties maven
58 Maven (Youssef Saadi / v2.0)
Vérification
mvn clean install on extrait le war généré
On se déplace vers WEB-INF/classes/application.properties
59 Maven (Youssef Saadi / v2.0)
Enterprise Repository
Cached
Control
Repository for our artefacts
Maven Enterprise
build Repository
Maven central
repository
60 Maven (Youssef Saadi / v2.0)
Installation depuis Docker:
Docker nexus sonatype
61 Maven (Youssef Saadi / v2.0)
Type de dépôt :
62 Maven (Youssef Saadi / v2.0)
Login as admin :
Enable anonymous access
63 Maven (Youssef Saadi / v2.0)
Création d’un dépôt de type maven2-group:
64 Maven (Youssef Saadi / v2.0)
Introduction :
65 Maven (Youssef Saadi / v2.0)
Configuration des dépôts proxy :
On copie le fichier de configuration des proxy dans .m2
66 Maven (Youssef Saadi / v2.0)
Configuration du projet web :
Pour utiliser un dépôt proxy; dans le pom.xml on ajoute :
Pour déployer notre projet dans le dépôt snapshot on ajoute:
67 Maven (Youssef Saadi / v2.0)
Déploiement :mvn deploy
Run as maven build
new configuration
68 Maven (Youssef Saadi / v2.0)
Des Questions ??
69 Maven (Youssef Saadi / v2.0)
Jenkins
télécharger jenkins.war
java -jar jenkins.war
http://localhost:8080/
Utiliser le password fourni en ligne de commande
Installer les plugins recommandés
70 Maven (Youssef Saadi / v2.0)