Vous êtes sur la page 1sur 35

Maven

Achref El Mouelhi

Docteur de l’université d’Aix-Marseille


Chercheur en programmation par contrainte (IA)
Ingénieur en génie logiciel

elmouelhi.achref@gmail.com

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

Vous aimerez peut-être aussi