Créer un projet web avec Maven pour Eclipse: Méthode ligne de commande

Logo MavenUn ami m’a fait remarquer à juste titre que je parlais des dépendances Maven dans beaucoup de mes articles mais que je n’avais pas présenté comment créer un projet Maven.

Je vais donc présenter deux manières différentes de créer un projet web avec Maven 2.2.1 au sein de deux articles différents.

La première méthode est en ligne de commande simple. La deuxième méthode utilise le plugin m2eclipse pour Eclipse.

Afin de pouvoir suivre les exemples de ces articles, je vous invite à télécharger la version 2.2.1 de Maven sur le site d’apache:

http://maven.apache.org/download.html

Le site du plugin m2eclipse à ajouter dans votre Eclipse (si il n’est pas déjà présent) est:

http://m2eclipse.sonatype.org/sites/m2e

Dans cette article je vais vous présenter la méthode en ligne de commande. Toutes les commandes Maven se passe via la console (que ça soit sous Linux, Os X ou Windows). Le projet est ensuite intégré au sein d’Eclipse.

 

Création du projet

Un projet Maven quel qu’il soit et quel que soit son format (jar, war, ear, …) s’identifie grâce à son groupId et son artifactId. Si l’on fait un parallèle avec la gestion d’utilisateur sous Linux, le groupId représente le groupe d’utilisateur. Il peut donc avoir plusieurs artifactId. Un artifactId (où l’utilisateur) est quand à lui unique dans son groupe.

La première chose à faire quand on créé un projet Maven est donc de définir le groupId et l’artifactId de notre projet.

Voici la commande a exécuter:

mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes
-DgroupId=net.blog.dev -DartifactId=test-maven

Le groupId est donc net.blog.dev et l’artifactId est test-maven.

La commande archetype:generate indique à Maven que l’on veut créer un projet depuis un modèle fournit par Maven lui même. Cette manière de faire permet de gagner du temps sur l’initialisation du projet.

Il existe énormément de modèles différents. Comme nous voulons faire un projet web nous allons utiliser le 196 (le numéro peut changer, la liste étant mise à jour régulièrement):

196: remote -> org.apache.maven.archetypes:maven-archetype-webapp
(An archetype which contains a sample Maven Webapp project.)

Nous choisissons ensuite la version du modèle la plus récente, soit la 1.0. Puis pour terminer, nous indiquons la version de notre projet. Comme il s’agit d’un projet de test, la numérotation proposée (1.0-SNAPSHOT) nous convient. Vous pouvez changer cela à votre guise.

Voilà, Maven vous à créé un répertoire test-maven qui contient le pom.xml. Ce fichier sert à indiquer à Maven le fonctionnement qu’il doit avoir pour ce projet. Vous trouverez également un répertoire src qui contient la base de votre projet web (avec le fameux web.xml).

Pour répondre au besoin d’Eclipse, je vous invite à créer un répertoire java dans le répertoire src/main. C’est ce répertoire qui contiendra vos sources Java.

 

Modification du pom.xml

Si vous ouvrez le fichier pom.xml, vous remarquerez que tout ce que nous avons configuré précédemment (groupId, …) est bien présent.

Remarquez également la balise packaging qui a pour valeur war ce qui correspond bien à un projet web.

C’est également dans ce fichier que nous pourrons configurer nos dépendances pour travailler avec différents frameworks. Je vous invite à lire l’article sur la présentation de Spring avec JSF pour voir un exemple concret de dépendance => Spring et JSF

Ce qui nous intéresse pour le moment est la partie build du pom.xml. Dans cette partie, nous allons configurer le comportement des plugins Maven lors de l’exécution des commandes. Nous allons nous concentrer sur trois plugins: maven-compiler-plugin, maven-resources-plugin et maven-eclipse-plugin.

Le plugin maven-complier est le plugin utilisé par Maven pour compiler nos sources (il est donc très utile :) ). Nous allons indiquer plusieurs éléments important à ce plugin.

Pour ce faire, ajouter ceci dans la section build du pom.xml:

<plugins>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>2.3.2</version>
    <configuration>
      <source>1.6</source>
      <target>1.6</target>
      <encoding>UTF-8</encoding>
    </configuration>
  </plugin>
</plugins>

Nous utilisons la dernière version du plugin (2.3.2) et nous indiquons à Maven que nous voulons compiler en Java 6 (dans la balise source et target). Nous indiquons également que nous voulons que les source soit encodées en UTF-8.

 

Le plugin maven-resources gère la copie des fichiers dans le répertoire de sortie. Nous allons placer sa configuration sous le précédant plugin:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-resources-plugin</artifactId>
  <version>2.5</version>
  <configuration>
    <encoding>UTF-8</encoding>
  </configuration>
</plugin>

Nous indiquons également à ce plugin l’encodage des fichiers à la sortie.

Ces deux plugins sont utilisés par défaut par Maven. Nous spécifions simplement nos besoins. Le prochain plugin (maven-eclipse) n’est pas utilisé par défaut. C’est celui qui permet de créer la configuration eclipse pour le projet afin de l’utiliser dans l’IDE.

Comme pour les autres plugins, ajoutez sa configuration dans le pom.xml:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-eclipse-plugin</artifactId>
  <version>2.8</version>
  <configuration>
    <wtpversion>2.0</wtpversion>
    <downloadSources>true</downloadSources>
    <downloadJavadocs>true</downloadJavadocs>
  </configuration>
</plugin>

Comme nous travaillons sur un projet web, nous devons spécifier la version de Web Tools Project utilisée. Ici nous la configurons à la dernière version gérée par le plugin, à savoir 2.0. Si vous ne spécifiez pas ce paramètre, Eclipse ne verra pas le projet comme un projet web et vous ne pourrez pas le déployer dans un serveur de test.

Ensuite nous spécifions que nous voulons télécharger les sources et les javadocs liés aux dépendances que nous utilisons. Ceci n’est pas obligatoire, il est simplement plus agréable de coder avec la javadoc à disposition et les sources pour pouvoir debugger.

 

Compilation du projet

Notre projet web est à présent configuré pour pouvoir fonctionner dans Eclipse. Pour compiler et générer la configuration Eclipse, il faut exécuter la commande suivante:

mvn clean install eclipse:clean eclipse:eclipse

Voici le détail des arguments de la commande:

  • clean efface tout le répertoire target et ce qui a été compilé précedemment
  • install compile l’ensemble de vos sources, copie vos ressources et créé le war snapshot dans le répertoire target
  • eclipse:clean efface la configuration Eclipse
  • eclipse:eclipse génère la nouvelle configuration Eclipse pour votre projet

 

Importation dans Eclipse

Maintenant que notre projet est prêt, il nous faut l’importer dans Eclipse. Une manipulation est toutefois nécessaire pour qu’Eclipse retrouve les jars téléchargés dans votre repository.

Pour savoir où se trouve votre repository, ouvrez le fichier settings.xml de Maven qui se situe dans le répertoire conf de votre installation Maven. Par défaut l’installation se situe dans le répertoire suivant:

repertoire-utilisateur/.m2/repository

Vous pouvez changer ce répertoire en ajoutant cette balise dans le fichier:

<localRepository>/chemin/absolu/vers/le/nouveau/repertoire</localRepository>

 

Dans notre Eclipse, nous allons ajouter une variable de classpath. Pour se faire, il faut aller dans le menu:

Windows -> Preferences -> Java -> Build Path -> Classpath Variables

Une fois dans ce menu ajoutez la variable M2_REPO pour qu’elle pointe vers votre repository:

Ajouter une variables de Class Path
Notre Eclipse est à présent près pour importer notre projet. Pour ce faire la manipulation est très simple.

Allez dans le menu File, puis Import.

Sélectionnez General -> Existing Projects into Workspace

Puis sélectionnez le répertoire test-maven qui a été créé par Maven. Vous devriez obtenir quelque chose comme ça:

Import Projet Maven

Cliquez sur Finish et votre projet Maven est enfin configuré et prêt à être utilisé dans Eclipse. Lorsque vous ajoutez de nouvelles dépendances, refaite un coup de « clean install eclipse:clean eclipse:eclipse » pour prendre en compte cette modification et reconfigurer Eclipse. Il vous suffira de faire un refresh de votre projet dans Eclipse pour prendre en compte ces modifications.

 

A présent, vous savez comment créer un projet web avec Maven en ligne de commande, prochainement je présenterais comment faire la même chose mais avec le plugin Eclipse m2Eclipse ;)

 

Mise à jour 22/08/2011: L’article sur m2eclipse est maintenant disponible => Plugin M2eclipse pour Maven