I. Introduction▲
Dans ce document, nous allons voir comment compiler une application Java, créée à l'aide de Maven, puis, comment l'importer dans Eclipse.
J'ai fait une vidéo avec toutes ces étapes. Rendez-vous dans le chapitre « conclusion » pour la regarder.
I-A. À propos▲
Découvrir une technologie n'est pas chose facile. En aborder plusieurs d'un coup l'est encore moins. Partant de ce constat, cet article a été écrit pour aller à l'essentiel. Les points importants sont présentés dans le corps de l'article et les éléments secondaires sont expliqués en annexe.
I-B. Avant de commencer▲
Pour suivre ce tutoriel, il est nécessaire d'avoir installé les éléments suivants :
- Java JDK 5 (ou plus) ;
- Eclipse 3 (ou plus) ;
- Maven 2/3.
Pour écrire ce tutoriel, j'ai utilisé les versions suivantes :
- Java JDK 1.6.0_24-b07 ;
- Eclipse Indigo 3.7 JEE 64b ;
- Maven 3.0.3.
I-C. Mise à jour▲
19 janvier 2012 : ajout d'une proposition de configuration du fichier « mvn.bat » en annexe.
16 novembre 2013 : j'ai mis la vidéo de toutes ces étapes sur YouTube et dans les conclusions.
II. Action▲
II-A. Télécharger le projet d'exemple▲
Durée estimée : 1 minute.
Pour commencer, je vous propose de télécharger le fichier Zip « calculette.zip », contenant un projet Java-Maven d'exemple, puis de le dézipper vers le dossier « C:\dvp\calculette\ ».
Le dossier « C:\dvp\calculette\ » doit alors contenir les éléments suivants :
- Dossier « src » ;
- Fichier « pom.xml » ;
- Fichiers « license.txt » et « README.txt » (ces deux derniers fichiers ne sont pas importants dans ce tutoriel).
II-B. Installer le projet avec Maven▲
Durée estimée : 1 minute.
Nous allons ouvrir un terminal (commande « cmd » sous Windows) et nous placer dans le dossier « C:\dvp\calculette\ »
c:
cd \
cd dvp
cd calculette
Puis nous allons installer (compiler) le projet à l'aide de Maven.
mvn compile
Maven va télécharger un certain nombre de bibliothèques. Il faut donc une connexion Internet.
Maven se sert du fichier « pom.xml » pour savoir quoi faire. Dans l'exemple, le fichier indique qu'il faut avoir les dépendances vers les frameworks JUnit et Guava.
<dependencies>
<!-- Junit -->
<dependency>
<groupId>
junit</groupId>
<artifactId>
junit</artifactId>
<scope>
test</scope>
<version>
4.8.2</version>
</dependency>
<!-- Guava -->
<dependency>
<groupId>
com.google.guava</groupId>
<artifactId>
guava</artifactId>
<version>
10.0</version>
</dependency>
</dependencies>
En fonction des éléments déjà présents sur le disque dur, le résultat de la compilation devrait ressembler à la sortie suivante.
C:\dvp\calculette>
mvn compile
[INFO] Scanning for
projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Calculette 1
.0
-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2
.4
.3
:resources (
default-resources) @ calculette ---
[INFO] Using 'UTF-8'
encoding to copy filtered resources.
[INFO] Copying 0
resource
[INFO]
[INFO] --- maven-compiler-plugin:2
.3
.2
:compile (
default-compile) @ calculette ---
[INFO] Compiling 5
source files to C:\dvp\calculette\target\classes
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 5
.205s
[INFO] Finished at: Thu Dec 15
07
:15
:54
CET 2011
[INFO] Final Memory: 6M/59M
[INFO] ------------------------------------------------------------------------
C:\dvp\calculette>
Durant ce traitement, Maven crée automatiquement le dossier « target » qui contient le programme compilé.
II-C. Préparation de l'import dans Eclipse▲
Durée estimée : 30 secondes.
Il faut maintenant créer les fichiers spécifiques à Eclipse, toujours à l'aide de Maven.
mvn eclipse:eclipse
En fonction des éléments déjà présents sur le disque dur, le résultat Maven devrait ressembler à la sortie suivante.
C:\dvp\calculette>
mvn eclipse:eclipse
[INFO] Scanning for
projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Calculette 1
.0
-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] maven-eclipse-plugin:2
.8
:eclipse (
default-cli) @ calculette
[INFO]
[INFO] maven-eclipse-plugin:2
.8
:eclipse (
default-cli) @ calculette
[INFO]
[INFO] --- maven-eclipse-plugin:2
.8
:eclipse (
default-cli) @ calculette ---
[INFO] Using Eclipse Workspace: null
[INFO] Adding default classpath container: org.eclipse.jdt.launching.JRE_CONTAINER
[INFO] Not writing settings - defaults suffice
[INFO] Wrote Eclipse project for
"calculette"
to C:\dvp\calculette.
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1
.916s
[INFO] Finished at: Wed Dec 14
07
:16
:22
CET 2011
[INFO] Final Memory: 7M/108M
[INFO] ------------------------------------------------------------------------
C:\dvp\calculette>
Durant ce traitement, Maven crée les fichiers « .classpath » et « .projet » dont Eclipse a besoin.
II-D. Import dans Eclipse▲
Durée estimée : 3 minutes.
On peut donc maintenant lancer Eclipse. Dans la suite, nous allons supposer que c'est la première fois qu'on importe un projet Maven dans Eclipse.
Pour commencer, il faut aller vers le Workbench (espace de travail) d'Eclipse en cliquant sur l'icône en haut à droite.
La première fois, dans ma version d'Eclipse (JEE) on arrive sur la perspective « Java EE ». On a besoin de la perspective « Java » simple. Pour l'avoir, il faut utiliser le menu « Window>Open perspective>Java »
On peut ensuite importer le projet dans Eclipse, pour cela il faut utiliser le menu « File>Import »
Il faut d'abord sélectionner l'emplacement du projet sur le disque dur.
Si c'est la première fois qu'on importe un projet Maven, Eclipse devrait indiquer des erreurs, car il manque un peu de configuration.
Pour configurer la variable manquante, il faut utiliser le menu « Window>Preferences ». Dans la popup qui s'ouvre, il faut aller dans la rubrique « Java>Build Path>Classpath Variables » et cliquer sur le bouton d'ajout d'une nouvelle variable.
Il faut ajouter une variable nommée « M2_REPO » et indiquer le dossier dans lequel sont stockées les bibliothèques utilisées par Maven (cf. annexes)
Après validation, Eclipse va demander de reconstruire le projet, ce qu'il faut accepter.
Les erreurs ne sont plus présentes et on a désormais la liste des dépendances utilisées (ici Guava, JUnit et JSR305)
Les classes Java sont dans « src>main>java »
Les classes de test sont dans « src>test>java »
On peut vérifier que tout est bon en lançant la classe de test « SimpleCalculetteTest » (clic droit sur le nom de la classe de test, puis « Run as>Junit test ».
Et voilà…
Dans les nouvelles versions d'Eclipse, il est possible d'importer directement un projet Maven sans passer par les étapes dans la console. Ça va donc plus vite et c'est plus simple. Néanmoins, à titre personnel, je préfère utiliser la ligne de commande pour conserver une plus grande maitrise, d'autant que je n'ai accès qu'à la ligne de commande en SSH sur mon serveur.
III. Conclusions▲
Pour un premier import dans Eclipse, c'était simple, non ? Pour les prochains imports, certaines étapes ne seront plus nécessaires, par exemple l'ajout de la variable « M2_REPO ».
Et pour que ce soit plus simple, je vous propose une petite vidéo de toutes ces étapes, en 5 minutes chrono.
Cliquez pour lire la vidéo
Vos retours nous aident à améliorer nos publications. N'hésitez donc pas à commenter cet article sur le forum : 10 commentaires
IV. Remerciements▲
Je tiens à remercier, en tant qu'auteur de tutoriel rapide, toutes les personnes qui m'ont aidé et soutenu. Je pense tout d'abord à mes collègues qui subissent mes questions au quotidien, mais aussi à mes contacts et amis du web, dans le domaine de l'informatique ou non, qui m'ont fait part de leurs remarques et critiques. Bien entendu, je n'oublie pas l'équipe de developpez.com qui m'a guidé dans la rédaction de cet article et m'a aidé à le corriger et le faire évoluer, principalement sur le forum.
Plus particulièrement j'adresse mes remerciements, par ordre alphabétique, à Gueritarish et keulkeul
V. Annexes▲
V-A. Configuration Maven▲
La configuration de Maven se fait dans le fichier « settings.xml » dans le dossier « conf ». Ce fichier indique par exemple l'emplacement du « Repository Maven » sur le disque.
<localRepository>
C:\dev\mavens\repository</localRepository>
Par défaut, sous Windows XP, le dépôt local (repository) se trouvera probablement dans « C:\Documents and Settings\USERNAME\.m2\repository » et sous Windows Vista, il se trouve dans « C:\Users\USERNAME\.m2\repository ». Sur les systèmes Unix, le repository Maven se trouve dans « ~/.m2/repository ».
C'est cette valeur qui est utilisée dans Eclipse pour la variable « M2_REPO ».
Pour choisir la version de Java que je souhaite utiliser avec Maven, j'ai pris l'habitude de modifier le fichier « mvn.bat » (sous Windows) en ajoutant la ligne suivante au début du fichier. Il y a d'autres moyens de le faire, mais je trouve que celui-ci est le plus simple/rapide.
set JAVA_HOME
=
C:\dev\javas\jdk1.6
.0_24
Comme je travaille sur de nombreux projets en même temps, avec des configurations différentes, j'ai besoin de vérifier rapidement si j'utilise bien le bon Maven. Pour cela j'ai simplement ajouté un « echo » dans mon fichier « mvn.bat ».
echo Maven 3
de Thierry
Du coup, lorsque je lance une commande Maven, le début de la trace ressemble aux lignes suivantes.
C:\dvp\calculette>
mvn clean install eclipse:eclipse
C:\dvp\calculette>
echo Maven 3
de Thierry
Maven 3
de Thierry
C:\dvp\calculette>
set JAVA_HOME
=
C:\dev\javas\jdk1.6
.0_24
[INFO] Scanning for
projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Calculette 1
.0
-SNAPSHOT
[INFO] ------------------------------------------------------------------------
...
[INFO] Wrote Eclipse project for
"calculette"
to C:\dvp\calculette.
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 16
.985s
[INFO] Finished at: Thu Jan 19
20
:39
:52
CET 2012
[INFO] Final Memory: 14M/60M
[INFO] ------------------------------------------------------------------------
C:\dvp\calculette>
V-B. Compile Vs Install▲
Nous avons vu qu'il faut utiliser la commande « mvn compile » pour compiler le programme. Toutefois, par habitude, j'utilise plutôt la commande « mvn install » qui fait bien plus de choses d'un seul coup. Je l'associe en général avec la commande « mvn clean » qui nettoie les éventuelles précédentes compilations ainsi qu'à la commande « mvn site » qui génère de la documentation. En début de projet, j'ai même pris l'habitude d'associer la commande « mvn eclipse:eclipse » pour préparer les fichiers de l'IDE.
Pour faire bonne mesure, je crée un fichier nommé « build.bat » contenant toutes ces commandes pour ne pas avoir à tout retaper à chaque fois.
C:\dvp\calculette>
mvn clean install site eclipse:eclipse
[INFO] Scanning for
projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Calculette 1
.0
-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2
.4
.1
:clean (
default-clean) @ calculette ---
[INFO]
[INFO] --- maven-resources-plugin:2
.4
.3
:resources (
default-resources) @ calculette ---
[INFO] Using 'UTF-8'
encoding to copy filtered resources.
[INFO] Copying 0
resource
[INFO]
[INFO] --- maven-compiler-plugin:2
.3
.2
:compile (
default-compile) @ calculette ---
[INFO] Compiling 5
source files to C:\dvp\calculette\target\classes
[INFO]
[INFO] --- maven-resources-plugin:2
.4
.3
:testResources (
default-testResources) @ calculette ---
[INFO] Using 'UTF-8'
encoding to copy filtered resources.
[INFO] Copying 0
resource
[INFO]
[INFO] --- maven-compiler-plugin:2
.3
.2
:testCompile (
default-testCompile) @ calculette ---
[INFO] Compiling 2
source files to C:\dvp\calculette\target\test-classes
[INFO]
[INFO] --- maven-surefire-plugin:2
.7
.2
:test (
default-test) @ calculette ---
[INFO] Surefire report directory: C:\dvp\calculette\target\surefire-reports
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running com.thi.calculette.SimpleCalculetteTest
Tests run: 4
, Failures: 0
, Errors: 0
, Skipped: 0
, Time elapsed: 0
.419
sec
Results :
Tests run: 4
, Failures: 0
, Errors: 0
, Skipped: 0
[INFO]
[INFO] --- maven-jar-plugin:2
.3
.1
:jar (
default-jar) @ calculette ---
[INFO] Building jar: C:\dvp\calculette\target\calculette-1
.0
-SNAPSHOT.jar
[INFO]
[INFO] --- maven-install-plugin:2
.3
.1
:install (
default-install) @ calculette ---
[INFO] Installing C:\dvp\calculette\target\calculette-1
.0
-SNAPSHOT.jar to C:\dev\mavens\repository\com\thi\calculette\1
.0
-SNAPSHOT\calculette-1
.0
-SNAP
SHOT.jar
[INFO] Installing C:\dvp\calculette\pom.xml to C:\dev\mavens\repository\com\thi\calculette\1
.0
-SNAPSHOT\calculette-1
.0
-SNAPSHOT.pom
[INFO]
[INFO] --- maven-site-plugin:2
.0
.1
:site (
default-site) @ calculette ---
Downloading: http://repository.jboss.org/nexus/content/groups/public/org/apache/maven/shared/maven-doxia-tools/1
.0
.2
/maven-doxia-tools-1
.0
.2
.pom
Downloading: http://repo1.maven.org/maven2/org/apache/maven/shared/maven-doxia-tools/1
.0
.2
/maven-doxia-tools-1
.0
.2
.pom
Downloaded: http://repo1.maven.org/maven2/org/apache/maven/shared/maven-doxia-tools/1
.0
.2
/maven-doxia-tools-1
.0
.2
.pom (
6
KB at 1
.8
KB/sec)
Downloading: http://repository.jboss.org/nexus/content/groups/public/org/apache/maven/shared/maven-doxia-tools/1
.0
.2
/maven-doxia-tools-1
.0
.2
.jar
Downloading: http://repo1.maven.org/maven2/org/apache/maven/shared/maven-doxia-tools/1
.0
.2
/maven-doxia-tools-1
.0
.2
.jar
Downloaded: http://repo1.maven.org/maven2/org/apache/maven/shared/maven-doxia-tools/1
.0
.2
/maven-doxia-tools-1
.0
.2
.jar (
41
KB at 102
.6
KB/sec)
Downloading: http://repository.jboss.org/nexus/content/groups/public/org/apache/maven/skins/maven-default-skin/maven-metadata.xml
Downloading: http://repo1.maven.org/maven2/org/apache/maven/skins/maven-default-skin/maven-metadata.xml
Downloaded: http://repo1.maven.org/maven2/org/apache/maven/skins/maven-default-skin/maven-metadata.xml (
341
B at 0
.8
KB/sec)
Downloaded: http://repository.jboss.org/nexus/content/groups/public/org/apache/maven/skins/maven-default-skin/maven-metadata.xml (
332
B at 0
.1
KB/sec)
Downloading: http://repo1.maven.org/maven2/org/apache/maven/skins/maven-default-skin/1
.0
/maven-default-skin-1
.0
.jar
Downloaded: http://repo1.maven.org/maven2/org/apache/maven/skins/maven-default-skin/1
.0
/maven-default-skin-1
.0
.jar (
8
KB at 18
.1
KB/sec)
[INFO]
[INFO] maven-eclipse-plugin:2
.8
:eclipse (
default-cli) @ calculette
[INFO]
[INFO] maven-eclipse-plugin:2
.8
:eclipse (
default-cli) @ calculette
[INFO]
[INFO] --- maven-eclipse-plugin:2
.8
:eclipse (
default-cli) @ calculette ---
[INFO] Using Eclipse Workspace: null
[INFO] Adding default classpath container: org.eclipse.jdt.launching.JRE_CONTAINER
[INFO] Not writing settings - defaults suffice
[INFO] Wrote Eclipse project for
"calculette"
to C:\dvp\calculette.
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 30
.826s
[INFO] Finished at: Thu Dec 15
07
:28
:26
CET 2011
[INFO] Final Memory: 17M/61M
[INFO] ------------------------------------------------------------------------
C:\dvp\calculette>
V-C. Lien▲
Pour aller plus loin avec Maven, je conseille la lecture du tutoriel de Matthieu Lux sur developpez.com à l'adresse https://matthieu-lux.developpez.com/tutoriels/java/maven/