« Développer en Java/Introduction à Apache Maven » : différence entre les versions

Contenu supprimé Contenu ajouté
source : http://perso.orange.fr/jm.doudoux/java/tutorial/indexavecframes.htm, section 52, auteur original : Jean-Michel DOUDOUX, GNU FDL, MAJ Maven V2 et install Linux
(Aucune différence)

Version du 13 août 2006 à 18:44

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

Wikipédia propose un article sur : « Apache Maven ».

Il permet notamment :

  • d'automatiser certaines tâches : compilation, tests unitaires et déploiement des applications qui composent le projet
  • de gérer des dépendances vis à vis des bibliothèques nécessaires au projet
  • de générer des documentations concernant le projet

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.

Installation

Il faut télécharger la version la plus récente de Maven sur le site officiel et la dézipper.

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

  • sur la page « Licence Agreement » : lire la licence et si vous l'acceptez cliquer sur le bouton « I Agree ».
  • sur la page « Installations Options » : sélectionner les éléments à installer et cliquer sur le bouton « Next ».
  • sur la page « Installation Folder » : sélectionner le répertoire dans lequel Maven va être installé et cliquer sur le bouton « Install ». Par défaut sous linux :
/usr/local/maven-2.0.3

ou, sous Windows :

C:\Program Files\Apache Software Foundation\maven-2.0.3
  • une fois les fichiers copiés, il suffit de cliquer sur le bouton « Close ».

Sous Windows, un élément de menu nommé « Apache Software Foundation / Maven --version » 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.

C:\Program Files\Apache Software Foundation\maven-2.0.3\bin";%PATH%

Sous Linux :

export PATH=/usr/local/maven-2.0.3/bin:$PATH

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.

Il faut s'assurer également que le JDK est installé. Le réperoire par défaut sous Windows est C:\Program Files\Java\jdk1.5.0_02. Sous linux :

JAVA_HOME=/usr/java/jdk1.5.0_02

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

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

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

maven --version

ou

mvn --version

Il devrait alors apparaître :

 __  __
|  \/  |__ _Apache__ ___
| |\/| / _` \ V / -_) ' \  ~ intelligent projects ~
|_|  |_\__,_|\_/\___|_||_|  --version

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

 __  __
|  \/  |__ _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.
..................................................

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.

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.

 <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.

 ... 
 <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.

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 :

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

La commande maven clean permet d'effacer tous les fichiers générés par Maven. 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> 

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.

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.

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

 ... 
   <build>

       <sourceDirectory>

         ${basedir}/src

       </sourceDirectory>

     </build> 
 ...

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

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.

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.

Voir aussi