Vous êtes sur la page 1sur 70

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)

Vous aimerez peut-être aussi