MAVEN
Bureau E204
© 2019-2020 – ESPRIT – Module SPRING – MAVEN
PLAN DU COURS
– Fonctionnalités Maven – Installation Maven – Premier Projet Maven – Arborescence du projet – Etapes de construction du projet – Gestion et portée des dépendances – Dépôts Maven – TP : Projet avec Maven (JAR) – TP : Projet Web Avec Maven (WAR)
© 2019-2020 – ESPRIT – Module SPRING – MAVEN
2
Fonctionnalités MAVEN
Maven est un outil pour le management et l’automatisation de production des projets (construction des projets) développé par la fondation Apache permettant :
L’intégration continue La gestion des dépendances locales et distantes dans le Modèle
de projet basé sur des conventions (POM)
Automatiser la gestion des builds et la génération des livrables Automatisation de tâches récurrentes Le lancement des tests
© 2019-2020 – ESPRIT – Module SPRING – MAVEN
3
INSTALLATION DE MAVEN
• Maven peut être installé :
En mode standalone Exemple: Utiliser Maven dans l’intégration continue (domaine DevOps)
En tant que plugin Par défaut, STS intègre un plugin Maven
© 2019-2020 – ESPRIT – Module SPRING – MAVEN
4
INSTALLATION DE MAVEN
• En mode plugin :
© 2019-2020 – ESPRIT – Module SPRING – MAVEN
5
PREMIER PROJET MAVEN
© 2019-2020 – ESPRIT – Module SPRING – MAVEN
6
PREMIER PROJET MAVEN
Un projet est caractérisé par : • project : Balise racine de tous les fichiers pom.xml. • modelVersion : Version de POM utilisée. • groupId : Identifier un groupe qui a créé le projet. Ex:
org.apache.
• artifactId : Nom unique utilisé pour nommer l’artifact à
construire.
• packaging : Type de packaging du projet ( ex. : JAR,
WAR, EAR...).
• archetype : Template de Projet. • name : Nom du projet. • description : Description du projet.
© 2019-2020 – ESPRIT – Module SPRING – MAVEN
7
Gestion des versions du projet
Exercice
Soit les versions du projet suivantes : 1.0 1.1.1 2.0 2.1 3.0
A quoi correspond chaque numérotation ?
Release Modification majeure Modification mineure
© 2019-2020 – ESPRIT – Module SPRING – MAVEN
8
Publicité
ARBORESCENCE DU PROJET
• Maven est basé sur la notion de convention over configuration (arborescence prédéfinie) ce qui le différencie par rapport à ses concurrents (Gradle, Ant) où une configuration supplémentaire est requise.
© 2019-2020 – ESPRIT – Module SPRING – MAVEN
9
ARBORESCENCE DU PROJET
• pom.xml : le fichier de configuration du projet • /src : code source et fichiers source principaux • /src/main/java : code source java • /src/main/resources : fichiers de ressources (images, fichiers
config...)
• /src/main/webapp : webapp du projet • /src/test : fichiers de test • /src/test/java : code source Java de test • /src/test/resources : fichiers de ressources de test • /target : fichiers résultat, les binaires (du code et des tests), les
packages générés et les résultats des tests
© 2019-2020 – ESPRIT – Module SPRING – MAVEN
10
Fichier POM.XML
Permet de spécifier les dépendances dont le projet a besoin. Spécifie l’emplacement de l’artifact du projet (groupId, ArtifactId,
version)
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.esprit.spring</groupId> <artifactId>tpMaven</artifactId> <version>1.0</version> <name>tpMaven</name> <description>tpMaven</description> <dependencies><dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.14.0</version> </dependency></dependencies> </project>
© 2019-2020 – ESPRIT – Module SPRING – MAVEN
11
COMMANDES MAVEN
• En faisant un click droit sur votre projet Maven, tu auras les commandes
suivantes:
• Par exemple, en cliquant sur Maven Install, un ensemble d’étapes de
construction du projet vont s’exécuter les unes après les autres et ceci va mettre à jour votre Repository local avec l’ensemble des livrables et dépendances nécessaires pour le bon fonctionnement du projet.
© 2019-2020 – ESPRIT – Module SPRING – MAVEN
12
Etapes de construction du projet
Un cycle de vie est constitué de phases consécutives aboutissant à la création de l’artifact de notre projet (jar, war, etc..)
© 2019-2020 – ESPRIT – Module SPRING – MAVEN
13
Etapes de construction du projet
• mvn compile : Créer les .class
• mvn test : Jouer les tests unitaires
• mvn package : Création du livrable dans target.
• mvn install : Copie du livrable dans le Repository local :
~\.m2\repository\...
• mvn deploy : Copie du livrable sur le repository distant
• mvn clean : Supprime le contenu du dossier target.
© 2019-2020 – ESPRIT – Module SPRING – MAVEN
14
Etapes de construction du projet
• Emplacement du livrable :
{emplacement Repository}/groupId/artifactId/version
• Nom du package (jar en général) : {artifactId}-{version}.{package}
© 2019-2020 – ESPRIT – Module SPRING – MAVEN
15
Publicité
Gestion et portée des dépendances
Pour ajouter une dépendance, il suffit de chercher la dépendance en question dans le mvnRepository (https://mvnrepository.com/) et l’inclure dans le pom.xml sous la balise <dependencies> comme suit :
<dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.23</version> </dependency> </dependencies>
© 2019-2020 – ESPRIT – Module SPRING – MAVEN
16
Gestion et portée des dépendances
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13</version> <scope>test</scope> </dependency>
Le scope precise la portée de la dépendance : compile : par default, disponible dans tous les classpath provided : disponible seulement pour le classpath de compilation runtime : disponible pour l’exécution (runtime et test classpaths) test :disponible seulement lors du lancement des tests ( test classpath)
© 2019-2020 – ESPRIT – Module SPRING – MAVEN
17
Gestion et portée des dépendances
© 2019-2020 – ESPRIT – Module SPRING – MAVEN
18
Dépôts Maven
• Maven s’appuie sur les dépôts ( repositories) pour stocker les jars des
dépendances et des livrables.
• Ce dépôt peut être : Distant : que ce soit le dépôt public Maven accessible via
https://mvnrepository.com/ ou privée (dépôt spécifique à la société)
Local : Le dépôt local se trouve par défaut sous l’arborescence
%path_dossier_M2%\repository
Privé : dans les serveurs dédiés à l’entreprise ( pour des raisons de
sécurité)
• Les dépôts sont organisés en groupes, artefacts et versions
© 2019-2020 – ESPRIT – Module SPRING – MAVEN
19
Multi projets Maven (Optionnel)
Avec Maven, il est possible d’avoir un projet composé de sous projets en respectant une architecture arboresente
Module Enfant
pom Module Enfant : hérite les propriétés du pom parent et spécifie les besoins propres à ce module
Module Parent
© 2019-2020 – ESPRIT – Module SPRING – MAVEN
20
TP1 – Projet avec Maven (JAR)
• Créer un Projet Maven :
• Simple : sans archetype, type Jar, groupId : tn.esprit • artefactId / nom / description : tpMavenWithJar • package : tn.esprit
• Mettre à jour le pom.xml pour utiliser Java 1.8 • Créer le package : tn.esprit • Créer la Classe : RepositoryLocation (Voir Code Source pages suivantes). • Créer le livrable avec Maven • Exécuter la méthode main.
© 2019-2020 – ESPRIT – Module SPRING – MAVEN
21
TP1 – Projet avec Maven (JAR)
package tn.esprit; import java.io.File;
public class RepositoryLocation {
public static void main(String[] args) { File file = new File("C:\\Users\\nameUser\\.m2\\repository\\tn\\esprit\\1.0"); String absolutePath = file.getAbsolutePath(); String filePath =absolutePath.substring(0,absolutePath.indexOf(File.separator,
30));
System.out.println("Le dossier contenant les dépendances " + "et les livrables des projets est : "); System.out.println( filePath); } }
Publicité
© 2019-2020 – ESPRIT – Module SPRING – MAVEN
22
TP1 – Projet avec Maven (JAR)
<project …… <modelVersion>4.0.0</modelVersion> <groupId>tn.esprit</groupId> <artifactId>tpMavenWithJar</artifactId> <version>1.0</version> <name>tpMavenWithJar</name> <description>tpMavenWithJar</description> <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <maven-jar-plugin.version>3.1.1</maven-jar-plugin.version> </properties> </project>
© 2019-2020 – ESPRIT – Module SPRING – MAVEN
23
TP2 – Projet Web avec Maven (WAR)
• Créer un nouveau projet de type Maven, simple (sans archetype) • Projet de type WAR
© 2019-2020 – ESPRIT – Module SPRING – MAVEN
24
TP2 – Projet Web avec Maven (WAR)
• Corriger l’erreur et le warning ci-dessous :
© 2019-2020 – ESPRIT – Module SPRING – MAVEN
25
TP2 – Projet Web avec Maven (WAR)
• Correction de l’erreur « web.xml missing », tout projet web doit contenir un fichier web.xml, cliquer sur « Generate … » pour le générer :
© 2019-2020 – ESPRIT – Module SPRING – MAVEN
26
TP2 – Projet Web avec Maven (WAR)
• Correction du warning « Java 1.5 », Pointer sur Java 8 : • Ajouter dans pom.xml les propriétés suivantes :
<properties>
<maven.compiler.target>1.8</maven.compiler.target> <maven.compiler.source>1.8</maven.compiler.source>
</properties>
• Puis, Faites un Maven Update.
© 2019-2020 – ESPRIT – Module SPRING – MAVEN
27
TP2 – Projet Web avec Maven (WAR)
• Faites un Maven Update.
© 2019-2020 – ESPRIT – Module SPRING – MAVEN
28
TP2 – Projet Web avec Maven (WAR)
• Ajouter une page web basique index.html :
© 2019-2020 – ESPRIT – Module SPRING – MAVEN
29
TP2 – Projet Web avec Maven (WAR)
• Déployer l’application sur Tomcat, et lancer l’URL : http://localhost:8080/maven-web
© 2019-2020 – ESPRIT – Module SPRING – MAVEN
30
MAVEN
Si vous avez des questions, n’hésitez pas à nous contacter :
Département Informatique UP Architectures des Systèmes d'Information
Bureau E204
© 2019-2020 – ESPRIT – Module SPRING – MAVEN