Maven
Achref El Mouelhi
Docteur de l’université d’Aix-Marseille
Chercheur en programmation par contrainte (IA)
Ingénieur en génie logiciel
[email protected]
H & H: Research and Training 1 / 23
Plan
1 Introduction
2 Un Java Project avec Maven
3 Un projet JEE avec Maven
4 Le fichier pom.xml
5 La gestion de dépendances
6 Maven via CLI
H & H: Research and Training 2 / 23
Introduction
Maven
Maven, c’est quoi ?
I c
H
Un générateur de squelette pour des projets Java ou JEE (il
EL
U
simplifie donc le processus de construction)
L MO (comme npm pour
Aussi, un gestionnaire de dépendance
JavaScript, Composer r e E PHP)
fpour
c h
Utilisantcun A
Object Model)
fichier de configuration pom.xml (pour Project
H & H: Research and Training 3 / 23
Un Java Project avec Maven
Maven
Comment créer un Java Project avec Maven
Aller dans File > New > Other
Chercher puis sélectionner Maven Project
I c
Cliquer sur Next
ELH
U
MO
Choisir maven-archetype-quickstart
L
Remplir les champsref
E
Group A
c h
c Id avec org.eclipse
Artifact Id avec first-maven
Package avec org.eclipse.main
Valider et attendre la fin des téléchargements (vérifier la présence
du fichier pom.xml)
H & H: Research and Training 4 / 23
Un Java Project avec Maven
Maven
Arborescence d’un projet Maven (quickstart) ≡ Java Project
I c
/src : les sources du projet
ELH
/src/main/java : code source OU
L M
ef
/src/test : fichiers de
r E
test
c h
c A : code source de test
/src/test/java
...
H & H: Research and Training 5 / 23
Un projet JEE avec Maven
Maven
Comment créer un projet JEE avec Maven
Aller dans File > New > Maven Project
Cliquer sur Next
I c
Choisir maven-archetype-webapp UE
LH
L MO
fE
Remplir les champs
h r e
cId avec first-jee-maven
Group Id avec org.eclipse
c
ArtifactA
Package avec org.eclipse.controller
Valider et attendre la fin de téléchargements (vérifier la présence
du fichier pom.xml)
H & H: Research and Training 6 / 23
Un projet JEE avec Maven
Maven
Si le projet est signalé en rouge
Aller Project > Properties > Targeted Runtimes
I c
ELH
Sélectionner un serveur de la liste ou ajouter un nouveau en
U
MO
cliquant sur New
f E L
Ensuite valider en cliquant sur Apply and Close
c hre
c A
H & H: Research and Training 7 / 23
Un projet JEE avec Maven
Maven
Si le projet est signalé en rouge
Aller Project > Properties > Targeted Runtimes
I c
ELH
Sélectionner un serveur de la liste ou ajouter un nouveau en
U
MO
cliquant sur New
f E L
Ensuite valider en cliquant sur Apply and Close
c hre
Exécuter c A
Lancer le serveur puis aller sur
http://localhost:8080/first-jee-maven/
H & H: Research and Training 7 / 23
Un projet JEE avec Maven
Maven
Arborescence d’un projet Maven (webapp) ≡ JEE Application
/src : les sources du projet
/src/main/java : code source I c
H
EL (images...)
/src/main/resources : fichiers de U
ressources
M O
f E
/src/main/webapp : webapp L du projet
c h rede test
c A : code source de test
/src/test : fichiers
/src/test/java
/src/test/resources : fichiers de ressources de test
...
H & H: Research and Training 8 / 23
Un projet JEE avec Maven
Maven
I
c
Remarque (pour les projets JEE)
E L H
À la création d’une Servlet dans unO U
L M projet JEE avec Maven, ce
re f E
dernier enregistre automatiquement cette servlet dans le
web.xml
c h
c A
H & H: Research and Training 9 / 23
Le fichier pom.xml
Maven
Éléments de base d’un fichier pom.xml
project : c’est la balise racine de ce fichier
I
c
E L H
modelVersion : c’est la version actuelle d’Apache Maven 4.0.0.
permettre de retrouver plus facilement M
U
O le projet.
groupId : ll permet d’identifier le groupe créateur
et rapidement
du projet. Cet identifiant doit
artifactId : il contiente
E L
le fnom du projet.
c h r
version : il prA
c
encours) soit RELEASE (pour les versions terminées)
les versions
écise le numéro de la version du projet plus soit SNAPSHOT (pour
description : elle contient une description du projet.
...
H & H: Research and Training 10 / 23
La gestion de dépendances
Maven
Pour gérer les dépendances
Il y a une section (une balise) <dependencies>
</dependencies> contenant des balises <dependency>
I
c
</dependency>
E L H
Dans les balises <dependency> O
U
enM
</dependency>, on définit
les dépendances d’un projetL
suivantes
h r e fE utilisant les sous-balises
A c
c
groupId
artifactId
version
...
H & H: Research and Training 11 / 23
La gestion de dépendances
Maven
I c
Où trouver ces dépendances ?
ELH
U
Dans le repository Maven
L MO
f E
hre
https://mvnrepository.com/
c
c A
H & H: Research and Training 12 / 23
La gestion de dépendances
Maven
Comment ajouter des dépendances ?
I c
H
EL la dépendance
Soit en cherchant dans le repository et en copiant
U
dans pom.xml (source)
L MO
h r e fE
Soit en allant sur l’onglet Dependencies de pom.xml, de cliquer
A c
sur Add, chercher et sélectionner une dépendance puis valider en
c et attendre le téléchargement.
enregistrer
H & H: Research and Training 13 / 23
La gestion de dépendances
<?xml version="1.0" encoding="UTF-8"?> <!-- Exemple -->
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.eclipse</groupId>
<artifactId>first-maven</artifactId>
<version>0.0.1-SNAPSHOT</version>
I c
<packaging>jar</packaging>
ELH
<name>first-maven</name>
U
MO
<url>http://maven.apache.org</url>
<properties>
f E L
hre
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
c
c A
</properties>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.24</version>
</dependency>
</dependencies>
</project>
H & H: Research and Training 14 / 23
Maven via CLI
Maven
CLI : Command Line Interface (interface en ligne de commande)
Une interface permettant à l’utilisateur de communiquer avec la
machine en utilisant des lignes de commande
Les commandes
I c
H
EL IDE...
peuvent être exécutées à partir d’une console,
U
ont la forme command options
L MO dataOrFiles
h r e fE
A c
c
H & H: Research and Training 15 / 23
Maven via CLI
Maven
CLI : Command Line Interface (interface en ligne de commande)
Une interface permettant à l’utilisateur de communiquer avec la
machine en utilisant des lignes de commande
Les commandes
I c
H
EL IDE...
peuvent être exécutées à partir d’une console,
U
ont la forme command options
L MO dataOrFiles
h r e fE
A c
Exemple de cconsole
Invite de commande
PowerShell
Cmder (Open-source acceptant les commandes Unix)
H & H: Research and Training 15 / 23
Maven via CLI
Maven
Télécharger, installer et lancer Cmder
https://cmder.net/
I c
ELH
U
L MO
f E
chre
c A
H & H: Research and Training 16 / 23
Maven via CLI
Maven
Télécharger, installer et lancer Cmder
https://cmder.net/
Pour vérifier la version de maven
I c
mvn --version
ELH
U
L MO
f E
chre
c A
H & H: Research and Training 16 / 23
Maven via CLI
Maven
Télécharger, installer et lancer Cmder
https://cmder.net/
Pour vérifier la version de maven
I c
mvn --version
ELH
U
Ou le raccourci
L MO
f E
hre
mvn -v
c
c A
H & H: Research and Training 16 / 23
Maven via CLI
Maven
Télécharger, installer et lancer Cmder
https://cmder.net/
Pour vérifier la version de maven
I c
mvn --version
ELH
U
Ou le raccourci
L MO
f E
hre
mvn -v
c
Le résultat
c A
Apache Maven 3.5.3 (...; 2018-02-24T20:49:05+01:00)
Maven home: C:\apache-maven-3.5.3\bin\..
Java version: 1.8.0_191, vendor: Oracle Corporation
Java home: C:\Program Files\Java\jre1.8.0_191
Default locale: fr_FR, platform encoding: Cp1252
OS name: "windows10", version: "10.0", arch: "amd64", family: "windows"
H & H: Research and Training 16 / 23
Maven via CLI
Pour créer un projet maven (copier la en une seule ligne)
mvn archetype:generate
-DgroupId={project-packaging}
-DartifactId={project-name}
-DarchetypeGroupId={archetype-groupId}
-DarchetypeArtifactId={archetype-name}
-DinteractiveMode=false
I c
ELH
U
L MO
f E
chre
c A
H & H: Research and Training 17 / 23
Maven via CLI
Pour créer un projet maven (copier la en une seule ligne)
mvn archetype:generate
-DgroupId={project-packaging}
-DartifactId={project-name}
-DarchetypeGroupId={archetype-groupId}
-DarchetypeArtifactId={archetype-name}
-DinteractiveMode=false
I c
Explication
ELH
U
mvn archetype:generate la commande permettant de générer un projet maven
Ce qui vient après : la liste des options
L MO
f E
-DgroupId={project-packaging} : structure des packages du projet
c hre
-DartifactId={project-name} : nom du projet
c A
-DarchetypeArtifactId={archetype-name} : nom du archetype ou le type
du projet
-DarchetypeGroupId={archetype-groupId} : l’identifiant du groupe de
l’archétype (valeur par défaut org.apache.maven.archetypes)
-DinteractiveMode=false (facultatif) : pour éviter de demander des
confirmations et d’afficher des messages détaillant les différentes phase du
génération du projet
H & H: Research and Training 17 / 23
Maven via CLI
Maven
Pour créer un Java Project avec maven (copier la en une seule ligne)
mvn archetype:generate
-DarchetypeArtifactId=maven-archetype-quickstart
-DgroupId=org.eclipse.classes
-DartifactId=MavenJavaProject
-DinteractiveMode=false
I c
ELH
U
L MO
f E
chre
c A
H & H: Research and Training 18 / 23
Maven via CLI
Maven
Pour créer un Java Project avec maven (copier la en une seule ligne)
mvn archetype:generate
-DarchetypeArtifactId=maven-archetype-quickstart
-DgroupId=org.eclipse.classes
-DartifactId=MavenJavaProject
-DinteractiveMode=false
I c
ELH
U
Remarque
L MO
f E
hre
L’artifactId de l’archétype quickstart est maven-archetype-quickstart
c
c A
Le groupId de l’archétype quickstart est org.apache.maven.archetypes
On n’a pas précisé le groupId ici car sa valeur correspond à la vleur par défaut
considérée par Maven
H & H: Research and Training 18 / 23
Maven via CLI
Maven
Pour créer un Java Project avec maven (copier la en une seule ligne)
mvn archetype:generate
-DarchetypeArtifactId=maven-archetype-quickstart
-DgroupId=org.eclipse.classes
-DartifactId=MavenJavaProject
-DinteractiveMode=false
I c
ELH
U
Remarque
L MO
f E
hre
L’artifactId de l’archétype quickstart est maven-archetype-quickstart
c
c A
Le groupId de l’archétype quickstart est org.apache.maven.archetypes
On n’a pas précisé le groupId ici car sa valeur correspond à la vleur par défaut
considérée par Maven
Ensuite, se déplacer dans le projet
cd MavenJavaProject
H & H: Research and Training 18 / 23
Maven via CLI
Maven
Arborescence générée (contenant 3 fichiers sources App.java, AppTest.java
et pom.xml)
install-maven-tutorial
|--pom.xml
--src
I c
----main
ELH
------java
U
--------org
L MO
----------eclipse
f E
hre
------------classes
|--------------App.java
c
----test c A
------java
--------org
----------eclipse
------------classes
|--------------AppTest.java
H & H: Research and Training 19 / 23
Maven via CLI
Maven
Contenu de App.java
package org.eclipse.classes;
/**
I c
* Hello world!
ELH
U
MO
*
*/
f E L
hre
public class App
c
c A
{
public static void main( String[] args )
{
System.out.println( "Hello World!" );
}
}
H & H: Research and Training 20 / 23
Maven via CLI
Pour compiler le projet et générer le .jar dans le dossier target target
mvn compile package
I c
ELH
U
L MO
f E
chre
c A
H & H: Research and Training 21 / 23
Maven via CLI
Pour compiler le projet et générer le .jar dans le dossier target target
mvn compile package
Un extrait du résultat affiché
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ MavenCli ---
[INFO] Building jar: C:\Users\elmou\eclipse\java-oxygen\MavenCli\target
\MavenCli-1.0-SNAPSHOT.jar
I c
[INFO]
ELH
-------------------------------------------------------------------
U
MO
[INFO] BUILD SUCCESS
[INFO]
E L
-------------------------------------------------------------------
f
hre
[INFO] Total time: 5.017 s
c
[INFO] Finished at: 2019-03-30T11:00:34+01:00
[INFO]
c A
-------------------------------------------------------------------
H & H: Research and Training 21 / 23
Maven via CLI
Pour compiler le projet et générer le .jar dans le dossier target target
mvn compile package
Un extrait du résultat affiché
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ MavenCli ---
[INFO] Building jar: C:\Users\elmou\eclipse\java-oxygen\MavenCli\target
\MavenCli-1.0-SNAPSHOT.jar
I c
[INFO]
ELH
-------------------------------------------------------------------
U
MO
[INFO] BUILD SUCCESS
[INFO]
E L
-------------------------------------------------------------------
f
hre
[INFO] Total time: 5.017 s
c
[INFO] Finished at: 2019-03-30T11:00:34+01:00
[INFO]
c A
-------------------------------------------------------------------
Pour lancer le .jar
java -cp target/MavenCli-1.0-SNAPSHOT.jar org.eclipse.classes.App
H & H: Research and Training 21 / 23
Maven via CLI
Pour compiler le projet et générer le .jar dans le dossier target target
mvn compile package
Un extrait du résultat affiché
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ MavenCli ---
[INFO] Building jar: C:\Users\elmou\eclipse\java-oxygen\MavenCli\target
\MavenCli-1.0-SNAPSHOT.jar
I c
[INFO]
ELH
-------------------------------------------------------------------
U
MO
[INFO] BUILD SUCCESS
[INFO]
E L
-------------------------------------------------------------------
f
hre
[INFO] Total time: 5.017 s
c
[INFO] Finished at: 2019-03-30T11:00:34+01:00
[INFO]
c A
-------------------------------------------------------------------
Pour lancer le .jar
java -cp target/MavenCli-1.0-SNAPSHOT.jar org.eclipse.classes.App
Le résultat
Hello World!
H & H: Research and Training 21 / 23
Maven via CLI
Maven
c
Pour créer un Web Project avec maven (copier la en une seule ligne)
I
mvn archetype:generate
EL H
U
-DgroupId=org.eclipse
L MO
-DartifactId=MavenWebProject
r e fE
-DarchetypeArtifactId=maven-archetype-webapp
h
c
-DinteractiveMode=false
A
c
H & H: Research and Training 22 / 23
Maven via CLI
Maven
Autres commandes Maven
mvn javadoc:javadoc pour générer la Javadoc
mvn test pour exécuter les tests unitaires
I
c
EL
mvn clean pour supprimer les fichiers générés H
mvn -Dmaven.test.skip=trueO
U
supprimer les fichiers génE L M clean package pour
les tests unitaireshre
f érés reconstruire le projet sans exécuter
A c
...
c
H & H: Research and Training 23 / 23
Maven via CLI
Maven
Autres commandes Maven
mvn javadoc:javadoc pour générer la Javadoc
mvn test pour exécuter les tests unitaires
I
c
EL
mvn clean pour supprimer les fichiers générés H
mvn -Dmaven.test.skip=trueO
U
supprimer les fichiers génE L M clean package pour
les tests unitaireshre
f érés reconstruire le projet sans exécuter
A c
...
c
Liste des options
http://maven.apache.org/ref/3.1.0/maven-embedder/cli.html
H & H: Research and Training 23 / 23