67. Ant 69. Tomcat Imprimer Sommaire Consulter avec table des matières Développons en Java   v 1.20  
Copyright (C) 1999-2009 Jean-Michel DOUDOUX  

 

68. Maven

 

chapitre 6 8

 

 

Maven permet de faciliter et d'automatiser certaines tâches de la gestion d'un projet Java.

Le site officiel est http://maven.apache.org

Il permet notamment :

Au premier abord, il est facile de croire que Maven fait double emploi avec Ant. Ant et Maven sont tous les deux développés par le groupe Jakarta, ce qui prouve bien que leur utilité n'est pas aussi identique.

Ant dont le but est d'automatiser certaines tâches répétitives est plus ancien que Maven. Maven propose non seulement ces fonctionnalités mais en propose de nombreuses autres.

Pour gérer les dépendances du projet vis à vis de bibliothèques, Maven utilise un ou plusieurs repositorys qui peuvent être locaux (.maven/repository) ou distants (http://www.ibiblio.org/maven par défaut)

Maven est extensible grâce à un mécanisme de plug in qui permet d'ajouter des fonctionnalités.

 

68.1. L'installation

Il faut télécharger le fichier maven-1.0-rc2.exe sur le site de Maven et l'exécuter.

Un assistant permet de fournir les informations concernant l'installation :

Sous Windows, un élément de menu nommé « Apache Software Foundation / Maven 1.0-rc2 » est ajouté dans le menu « Démarrer / Programmes ».

Pour utiliser Maven, la variable d'environnement système nommée MAVEN_HOME doit être définie avec comme valeur le chemin absolu du répertoire dans lequel Maven est installé. Par défaut, cette variable est configurée automatiquement lors de l'installation sous Windows.

Il est aussi particulièrement pratique d'ajouter le répertoire %MAVEN_HOME%/bin à la variable d'environnement PATH. Maven étant un outil en ligne de commande, cela évite d'avoir à saisir son chemin complet lors de son exécution.

Enfin, il faut créer un repository local en utilisant la commande ci dessous dans une boîte de commandes DOS :

Exemple :
C:\>install_repo.bat %HOMEDRIVE%%HOMEPATH%

Pour s'assurer de l'installation correcte de Maven, il suffit de saisir la commande :

Exemple :
C:\>maven -v
 __  __
|  \/  |__ _Apache__ ___
| |\/| / _` \ V / -_) ' \  ~ intelligent projects ~
|_|  |_\__,_|\_/\___|_||_|  v. 1.0-rc2
C:\>

Lors de la première exécution de Maven, ce dernier va constituer le repository local (une connexion internet est nécessaire).

Exemple :
|  \/  |__ _Apache__ ___
| |\/| / _` \ V / -_) ' \  ~ intelligent projects ~
|_|  |_\__,_|\_/\___|_||_|  v. 1.0-rc2
Le rÚpertoire C:\Documents and Settings\Administrateur\.maven\repository n'exist
e pas. Tentative de crÚation.
Tentative de tÚlÚchargement de commons-lang-1.0.1.jar.
.................................
.
Tentative de tÚlÚchargement de commons-net-1.1.0.jar.
................................................................................
........
.
Tentative de tÚlÚchargement de dom4j-1.4-dev-8.jar.
................................................................................
................................................................................
................................................................................
..............................................................
.
Tentative de tÚlÚchargement de xml-apis-1.0.b2.jar.
........................................................

 

68.2. Les plug-ins

Toutes les fonctionnalités de Maven sont proposées sous la forme de plug-ins.

Le fichier maven.xml permet de configurer les plug-ins installés.

 

68.3. Le fichier project.xml

Maven est orienté projet, donc le projet est l'entité principale gérée par Maven. Il est nécessaire de fournir à Maven une description du projet (Project descriptor) sous la forme d'un document XML nommé project.xml et situé à la racine du répertoire contenant le projet.

Exemple : un fichier minimaliste
  <project> 
   
    <id>P001</id> 
    <name>TestMaven</name> 
    <currentVersion>1.0</currentVersion> 
    <shortDescription>Test avec Maven</shortDescription> 
   
    <developers> 
      <developer> 
        <name>Jean Michel D.</name> 
        <id>jmd</id> 
        <email>jmd@test.fr</email> 
      </developer> 
    </developers>  
   
    <organization> 
      <name>Jean-Michel</name> 
    </organization>  
   
  </project>

Il est possible d'inclure la valeur d'un tag défini dans le document dans un autre tag.

Exemple :
  ... 
  <shortDescription>${pom.name} est un test avec Maven</shortDescription> 
  ...

Il est possible d'hériter d'un fichier project.xml existant dans lequel des caractéristiques communes à plusieurs projets sont définies. La déclaration dans le fichier du fichier père se fait avec le tag <extend>. Dans le fichier fils, il suffit de redéfinir ou de définir les tags nécessaires.

 

68.4. L'exécution de Maven

Maven s'utilise en ligne de commande sous la forme suivante :

Maven plugin:goal

Il faut exécuter Maven dans le répertoire qui contient le fichier project.xml.

Si les paramètres fournis ne sont pas corrects, une exception est levée :

Exemple :
C:\java\test\testmaven>maven compile 
 __  __ 
|  \/  |__ _Apache__ ___ 
| |\/| / _` \ V / -_) ' \  ~ intelligent projects ~ 
|_|  |_\__,_|\_/\___|_||_|  v. 1.0-rc2 
com.werken.werkz.NoSuchGoalException: No goal [compile] 
        at com.werken.werkz.WerkzProject.attainGoal(WerkzProject.java:190) 
        at org.apache.maven.plugin.PluginManager.attainGoals(PluginManager.java: 
531) 
        at org.apache.maven.MavenSession.attainGoals(MavenSession.java:265) 
        at org.apache.maven.cli.App.doMain(App.java:466) 
        at org.apache.maven.cli.App.main(App.java:1117) 
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl. 
java:39) 
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces 
sorImpl.java:25) 
        at java.lang.reflect.Method.invoke(Method.java:324) 
        at com.werken.forehead.Forehead.run(Forehead.java:551) 
        at com.werken.forehead.Forehead.main(Forehead.java:581) 
Total time: 4 seconds 
Finished at: Tue May 18 14:17:18 CEST 2004 

Pour obtenir une liste complète des plug-ins à disposition de Maven, il suffit d'utiliser la commande maven -g

Voici quelques uns des nombreux plug-ins avec leurs goals principaux :

Plug in

Goal

Description

ear

ear

construire une archive de type ear

deploy

déployer un fichier ear dans un serveur d'application

ejb

ejb

 

deploy

 

jalopy

format

 

java

compile

compiler des sources

jar

créer une archive de type .jar

javadoc

   

jnlp

   

pdf

 

générer la documentation du projet au format PDF

site

generate

générer le site web du projet

deploy

copier le site web sur un serveur web

test

match

exécuter des tests unitaires

war

init

 

war

 

deploy

 

La commande maven clean permet d'effacer tous les fichiers générés par Maven.

Exemple :
C:\java\test\testmaven>maven clean 
 __  __ 
|  \/  |__ _Apache__ ___ 
| |\/| / _` \ V / -_) ' \  ~ intelligent projects ~ 
|_|  |_\__,_|\_/\___|_||_|  v. 1.0-rc2 
build:start: 
clean:clean: 
    [delete] Deleting directory C:\java\test\testmaven\target 
    [delete] Deleting: C:\java\test\testmaven\velocity.log 
BUILD SUCCESSFUL 
Total time: 2 minutes 7 seconds 
Finished at: Tue May 25 14:19:03 CEST 2004 
C:\java\test\testmaven> 

 

68.5. La génération du site du projet

Maven propose une fonctionnalité qui permet de générer automatique un site web pour le projet regroupant un certain nombre d'informations utiles le concernant.

Pour demander la génération du site, il suffit de saisir la commande

maven site:generate

Lors de l'exécution de cette commande, un répertoire target/docs est créé contenant les différents éléments du site.

Exemple :
C:\java\test\testmaven\target\docs>dir 
 Le volume dans le lecteur C s'appelle MACHINE 
 Le numéro de série du volume est 3T78-19E4 
 Répertoire de C:\java\test\testmaven\target\docs 
25/05/2004  14:21       <DIR>          . 
25/05/2004  14:21       <DIR>          .. 
25/05/2004  14:21       <DIR>          apidocs 
25/05/2004  14:21                5 961 checkstyle-report.html 
25/05/2004  14:21                1 637 cvs-usage.html 
25/05/2004  14:21                1 954 dependencies.html 
25/05/2004  14:21       <DIR>          images 
25/05/2004  14:21                1 625 index.html 
25/05/2004  14:21                1 646 issue-tracking.html 
25/05/2004  14:21                3 119 javadoc.html 
25/05/2004  14:21                9 128 jdepend-report.html 
25/05/2004  14:21                2 494 license.html 
25/05/2004  14:21                5 259 linkcheck.html 
25/05/2004  14:21                1 931 mail-lists.html 
25/05/2004  14:21                4 092 maven-reports.html 
25/05/2004  14:21                3 015 project-info.html 
25/05/2004  14:21       <DIR>          style 
25/05/2004  14:21                2 785 task-list.html 
25/05/2004  14:21                3 932 team-list.html 
25/05/2004  14:21       <DIR>          xref 
              14 fichier(s)           48 578 octets 
               6 Rép(s)     207 151 616 octets libres 

Par défaut, le site généré contient un certain nombre de pages accessibles via le menu de gauche.

La partie « Project Info » regroupe trois pages : la mailing liste, la liste des développeurs et les dépendances du projet.

La partie « Project report » permet d'avoir accès à des comptes rendus d'exécution de certaines tâches : javadoc, tests unitaires, ... Certaines de ces pages ne sont générées qu'en fonction des différents éléments générés par Maven.

Le contenu du site pourra donc être réactualisé facilement en fonction des différents traitements réalisés par Maven sur le projet.

 

68.6. La compilation du projet

Dans le fichier project.xml, il faut rajouter un tag <build> qui va contenir les informations pour la compilation des éléments du projet.

Les sources doivent être contenues dans un répertoire dédié, par exemple src

Exemple :
  ... 
    <build> 
        <sourceDirectory> 
          ${basedir}/src 
        </sourceDirectory> 
      </build> 
  ...

Pour demander la compilation à Maven, il faut utiliser la commande

Exemple :
Maven java :compile  
C:\java\test\testmaven>maven java:compile  
 __  __  
|  \/  |__ _Apache__ ___  
| |\/| / _` \ V / -_) ' \  ~ intelligent projects ~  
|_|  |_\__,_|\_/\___|_||_|  v. 1.0-rc2  
Tentative de tÚlÚchargement de commons-jelly-tags-antlr-20030211.143720.jar.  
.....  
.  
build:start:  
java:prepare-filesystem:  
    [mkdir] Created dir: C:\java\test\testmaven\target\classes  
java:compile:  
    [echo] Compiling to C:\java\test\testmaven/target/classes  
    [javac] Compiling 1 source file to C:\java\test\testmaven\target\classes  
BUILD SUCCESSFUL  
Total time: 12 seconds  
Finished at: Tue May 18 14:19:12 CEST 2004 

Le répertoire « target/classes » est créé à la racine du répertoire du projet. Les fichiers .class issus de la compilation sont stockés dans ce répertoire.

La commande maven jar permet de demander la génération du packaging de l'application.

Exemple :
build:start:  
java:prepare-filesystem:  
java:compile:  
    [echo] Compiling to C:\java\test\testmaven/target/classes  
java:jar-resources:  
test:prepare-filesystem:  
    [mkdir] Created dir: C:\java\test\testmaven\target\test-classes  
    [mkdir] Created dir: C:\java\test\testmaven\target\test-reports  
test:test-resources:  
test:compile:  
    [echo] No test source files to compile.  
test:test:  
    [echo] No tests to run.  
jar:jar:  
    [jar] Building jar: C:\java\test\testmaven\target\P001-1.0.jar  
BUILD SUCCESSFUL  
Total time: 2 minutes 42 seconds  
Finished at: Tue May 18 14:25:39 CEST 2004 

Par défaut, l'appel à cette commande effectue une compilation des sources, un passage des tests unitaires si il y en a et un appel à l'outil jar pour réaliser le packaging.

Le nom du fichier jar créé est composé de l'id du projet et du numéro de version. Il est stocké dans le répertoire racine du projet.

 


  67. Ant 69. Tomcat Imprimer Sommaire Consulter avec table des matières Développons en Java   v 1.20  
Copyright (C) 1999-2009 Jean-Michel DOUDOUX