apache maven {9782744040986}

320
Référence Réseaux et télécom Programmation Génie logiciel Sécurité Système d’exploitation Apache Nicolas De loof et Arnaud Héritier Préface de Jason Van Zyl

Upload: faysalelqour

Post on 08-Nov-2015

152 views

Category:

Documents


18 download

DESCRIPTION

Maven

TRANSCRIPT

  • Rfr

    ence

    Rseauxet tlcom

    Programmation

    Gnie logiciel

    Scurit

    Systme dexploitation

    ApacheNicolas De loof et Arnaud HritierPrface de Jason Van Zyl

  • Apache MavenNicolas De loof et Arnaud Hritier

    Avec la contribution des membres francophones de la communaut Maven,en particulier Stphane Nicoll, Vincent Siveston, Raphal Pironi, Herv Boutemy,

    Jrme Van Der Linden, Antonio Goncalves et Franois Le Droff

    Maven Livre Page I Mercredi, 14. octobre 2009 7:26 07

  • Pearson Education France a apport le plus grand soin la ralisation de ce livre afin de vous four-nir une information complte et fiable. Cependant, Pearson Education France nassume de respon-sabilits, ni pour son utilisation, ni pour les contrefaons de brevets ou atteintes aux droits de tiercespersonnes qui pourraient rsulter de cette utilisation.

    Les exemples ou les programmes prsents dans cet ouvrage sont fournis pour illustrer les descriptionsthoriques. Ils ne sont en aucun cas destins une utilisation commerciale ou professionnelle.

    Pearson Education France ne pourra en aucun cas tre tenu pour responsable des prjudicesou dommages de quelque nature que ce soit pouvant rsulter de lutilisation de ces exemples ouprogrammes.

    Tous les noms de produits ou marques cits dans ce livre sont des marques dposes par leurspropritaires respectifs.Apache, Apache Maven, Maven, and the Apache Maven logo are trademarks of The ApacheSoftware Foundation. Used with permission. No endorsement by The Apache Software Foundationis implied by the use of these marks.

    Aucune reprsentation ou reproduction, mme partielle, autre que celles prvues larticle L. 122-5 2 et 3 a) du code de laproprit intellectuelle ne peut tre faite sans lautorisation expresse de Pearson Education France ou, le cas chant, sansle respect des modalits prvues larticle L. 122-10 dudit code.

    All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic ormechanical, including photocopying, recording or by any information storage retrieval system, without permission fromPearson Education, Inc.

    Publi par Pearson Education France47 bis, rue des Vinaigriers75010 PARISTl. : 01 72 74 90 00www.pearson.fr

    Mise en pages : TyPAO

    ISBN : 978-2-7440-4098-6Copyright 2009 Pearson Education FranceTous droits rservs

    Maven Livre Page II Mercredi, 14. octobre 2009 7:26 07

  • Table des matires

    Ta

    Pr

    Av

    1

    2

    Maven Livre Page III Mercredi, 14. octobre 2009 7:26 07ble des listings ................................................................................................................ XI

    face ................................................................................................................................ XIII

    ant-propos ...................................................................................................................... XVIIContenu ....................................................................................................................... XIX

    Partie I

    Premiers pas avec Maven

    Introduction .................................................................................................................. 3Prologue ...................................................................................................................... 3Partageons ! ................................................................................................................ 4Les fourmis la rescousse .......................................................................................... 6Et Maven dans tout a ? .............................................................................................. 7Que fait Maven ? ........................................................................................................ 8La cl du mystre ........................................................................................................ 10

    Convention plutt que configuration ..................................................................... 11Dcrire plutt que programmer ............................................................................. 12POM ...................................................................................................................... 12Pourquoi adopter ces conventions ? ...................................................................... 15

    La force de Maven ...................................................................................................... 16

    Au-del de java.lang .................................................................................................. 17Des JAR sous CVS ...................................................................................................... 17

    Quand le rpertoire lib explose ........................................................................... 17Identification univoque ......................................................................................... 20Dpt de bibliothques ......................................................................................... 21

    Avis aux amateurs de casse-tte ................................................................................. 22Lami de mon ami ............................................................................................. 23

    Testons un peu ............................................................................................................ 26Les "scopes" .......................................................................................................... 27

  • IV Apache Maven

    Une arme double tranchant ...................................................................................... 27Lanalyse des dpendances ................................................................................... 30

    Conclusion .................................................................................................................. 32

    3 Un peu plus que compiler ............................................................................................ 33

    4

    5

    Maven Livre Page IV Mercredi, 14. octobre 2009 7:26 07tes-vous prt pour Java 7 ? ....................................................................................... 33Plugins ........................................................................................................................ 35Proprits .................................................................................................................... 36Quand Java ne suffit plus ............................................................................................ 38

    O placer les sources ............................................................................................ 39Ajouter un plugin .................................................................................................. 40Plugin et tches ..................................................................................................... 41

    Compiler en JavaScript ........................................................................................... 42Invoquer un plugin ................................................................................................ 45Cycle de vie .......................................................................................................... 45

    Gnrer du code .......................................................................................................... 48Produire autre chose quun JAR .................................................................................. 50Des plugins pour tout ? ............................................................................................... 52Conclusion .................................................................................................................. 53

    Mettre en place des tests unitaires .............................................................................. 55Tester ? Pour quoi faire ? ............................................................................................ 55

    Automatisons ! ...................................................................................................... 56Utiliser un framework de test ................................................................................ 58

    Les tests sous Maven .................................................................................................. 60Le scope "test" ...................................................................................................... 61Le dveloppement pilot par les tests ................................................................... 62Pas de JAR sans tests russis ................................................................................. 65Rutiliser notre outillage de test ........................................................................... 65

    Lintgration continue ................................................................................................. 67Continuum ............................................................................................................ 68Hudson .................................................................................................................. 69Lequel choisir ? ..................................................................................................... 70

    Conclusion .................................................................................................................. 71

    Mettre en place des tests dintgration ....................................................................... 73Des tests unitaires de moins en moins unitaires ..................................................... 73

    Quest-ce quun test "unitaire" .............................................................................. 74Les profils ................................................................................................................... 75

    Sadapter lenvironnement ................................................................................. 76Dsactiver la demande ....................................................................................... 78

    Tester laccs une base de donnes .......................................................................... 79

  • VUtiliser des tests fonctionnels ..................................................................................... 82Tester la charge et les performances ........................................................................... 84

    Intgration continue .............................................................................................. 85Conclusion .................................................................................................................. 86

    6

    7

    Maven Livre Page V Mercredi, 14. octobre 2009 7:26 07Partie II

    Maven en entreprise

    Gestion avance des dpendances ............................................................................... 91Oracle, quand tu nous tiens ........................................................................................ 91

    Un moteur de recherche pour Maven .................................................................... 92Pourquoi publier un POM sans JAR ? ...................................................................... 93Installer le fichier manquant ................................................................................. 94Les dpendances "System" ................................................................................... 94

    Crer son propre dpt ............................................................................................... 96Contrle didentit, vos papiers sil vous plat ! ................................................... 96Rebelote : mais o est javax.jms ? ........................................................................ 97

    Grer son dpt priv ................................................................................................. 98Mtadonnes ............................................................................................................... 100Passer un "vritable" gestionnaire de dpt ............................................................. 100

    Un miroir de central ............................................................................................. 101Un gestionnaire dartefacts ................................................................................... 101

    Conclusion .................................................................................................................. 106

    Quand le projet devient trop lourd ............................................................................. 107Un projet un artefact ................................................................................................ 107

    Hritage ................................................................................................................. 108Packaging dun POM parent ................................................................................. 109Parent "naturel" ..................................................................................................... 110

    Mutualiser ................................................................................................................... 111Gestion des dpendances ...................................................................................... 111Gestion des plugins ............................................................................................... 112

    Diviser pour rgner ..................................................................................................... 114Hritage "naturel" ................................................................................................. 115Et lintgration continue ? ..................................................................................... 115Un gros projet vs plein de modules ....................................................................... 116Les modules au service de larchitecture .............................................................. 117

    Conclusion .................................................................................................................. 117

  • VI Apache Maven

    8 Maven et JEE ................................................................................................................ 119Java Entreprise Edition ............................................................................................... 119

    Construire une archive web WAR ......................................................................... 120Construire un EJB ................................................................................................. 123Construire une archive dentreprise EAR ............................................................. 126

    9

    Maven Livre Page VI Mercredi, 14. octobre 2009 7:26 07Tester .......................................................................................................................... 128Selenium ............................................................................................................... 128Cargo ..................................................................................................................... 132

    Soyons pragmatiques, soyons productifs .................................................................... 134Une application web "sur place" ........................................................................... 134Une application web sans assemblage .................................................................. 135Ne plus sortir de lIDE .......................................................................................... 135Tester les EJB ........................................................................................................ 137

    JEE6 .......................................................................................................................... 137Conclusion .................................................................................................................. 139

    Maven et les IDE........................................................................................................... 141Un plugin Maven pour Eclipse ............................................................................. 141Maven vu depuis lIDE ......................................................................................... 142

    Eclipse ........................................................................................................................ 143Installation ............................................................................................................ 143Import dun projet Maven ..................................................................................... 143Prise en main ......................................................................................................... 144Gestion du POM ................................................................................................... 145Intgration des plugins Maven .............................................................................. 147Et la cerise ......................................................................................................... 148Interrogations ........................................................................................................ 149

    Intellij Idea .................................................................................................................. 149Import dun projet Maven ..................................................................................... 149Gestion du POM ................................................................................................... 150Intgration des plugins Maven .............................................................................. 152Bonus .................................................................................................................... 152

    NetBeans ..................................................................................................................... 153Prise en main ......................................................................................................... 153Import dun projet Maven ..................................................................................... 153Gestion du POM ................................................................................................... 154Intgration des plugins Maven .............................................................................. 154Bonus .................................................................................................................... 154

    Dlibration du jury .................................................................................................... 155Conclusion .................................................................................................................. 156

  • VII

    10 Le jour J : la livraison ................................................................................................ 157Stratgie de livraison .................................................................................................. 157

    Premire livraison ................................................................................................. 157Deuxime livraison ............................................................................................... 158Troisime livraison ............................................................................................... 158

    11

    12

    Maven Livre Page VII Mercredi, 14. octobre 2009 7:26 07Documentation ...................................................................................................... 159Le plugin release ...................................................................................................... 160

    tape 1 : prparation ............................................................................................. 160tape 2 : livraison ................................................................................................. 161Et si a foire ? ....................................................................................................... 163Notre prochaine version ........................................................................................ 163

    Tester des candidats .................................................................................................... 163Urgence ! .................................................................................................................... 165Au-del de lintgration continue ............................................................................... 166Conclusion .................................................................................................................. 168

    Partie 3

    Encore plus loin avec Maven

    Utiliser un outil non support.................................................................................... 171Un outil maison .......................................................................................................... 171

    Rutiliser lexistant ............................................................................................... 172Retour dans un monde de scripts ? ....................................................................... 174

    Crer un plugin ........................................................................................................... 174Pas de panique ! .................................................................................................... 174Des paramtres pour le plugin .............................................................................. 176Un modle dynamique .......................................................................................... 177Plexus .................................................................................................................... 178Des classes et des royaumes ............................................................................. 180Au-del de Java ..................................................................................................... 183

    Tester notre plugin ...................................................................................................... 185Plugin testing harness ........................................................................................... 186Plugin invoker ..................................................................................................... 187

    Conclusion .................................................................................................................. 189

    Lassurance qualit..................................................................................................... 191Audit de code .............................................................................................................. 191

    Analyse statique .................................................................................................... 192Analyse dynamique ............................................................................................... 195

  • VIII Apache Maven

    Les rapports Maven .................................................................................................... 198Autre chose que du HTML ................................................................................... 200

    Exploiter notre gestion documentaire ......................................................................... 20168 %, qui dit mieux ? ............................................................................................ 202Lentropie augmente ............................................................................................. 202

    13

    14

    15

    Maven Livre Page VIII Mercredi, 14. octobre 2009 7:26 07Matrise de S ......................................................................................................... 203Sonar ..................................................................................................................... 204

    Conclusion .................................................................................................................. 207

    Respecter un format de distribution ......................................................................... 209Do vient ce JAR ? ..................................................................................................... 209

    Numro de construction ........................................................................................ 210Numro de rvision ............................................................................................... 211Utiliser le MANIFEST .......................................................................................... 212

    La confiance rgne .................................................................................................. 214LEAR ne suffit pas .................................................................................................... 216

    Assemblage du livrable ......................................................................................... 217Lintgration continue produit notre livrable ........................................................ 219Luf ou la poule ? ............................................................................................... 220

    OSGi ? ........................................................................................................................ 221Conclusion .................................................................................................................. 222

    Un nouveau projet dmarre....................................................................................... 223Mutualiser ................................................................................................................... 223

    Qui paye ? ............................................................................................................. 224Partager un POM parent ....................................................................................... 224Copier-coller ......................................................................................................... 225

    Copier et mutualiser ! ................................................................................................. 226Un plugin qui cre des projets .............................................................................. 226Un archtype ? ...................................................................................................... 228Construire ses propres archtypes ......................................................................... 228

    Grer un projet de rfrence ....................................................................................... 229Donner le meilleur de nous-mmes ...................................................................... 230Dmarrer sur les bons rails ................................................................................... 230Un support pour exprimenter .............................................................................. 231Un support de dmonstration ................................................................................ 232

    Conclusion .................................................................................................................. 233

    Avons-nous fait le bon choix ? ................................................................................... 235Les limites .................................................................................................................. 236

    Points faibles ......................................................................................................... 236Les plugins ............................................................................................................ 237

  • IX

    Le support ............................................................................................................. 238Le cot de Maven .................................................................................................. 240

    La concurrence ........................................................................................................... 240Maven bon partout ? ............................................................................................. 240Ant et Ivy ............................................................................................................... 242

    16

    Maven Livre Page IX Mercredi, 14. octobre 2009 7:26 07EasyAnt.................................................................................................................. 242Gradle..................................................................................................................... 242Maven 1 ................................................................................................................. 244Buildr ..................................................................................................................... 244

    Un outil reconnu ......................................................................................................... 244La communaut ..................................................................................................... 245Lquipe de dveloppement .................................................................................. 247Ladoption en entreprise ....................................................................................... 247

    Lavenir de Maven ...................................................................................................... 248Maven 2.x ............................................................................................................. 249Maven 3.x ............................................................................................................. 251

    qui appartient Maven ? ........................................................................................... 255La fondation Apache ............................................................................................ 256Sonatype ................................................................................................................ 256Maven + OSGi = Tycho ........................................................................................ 257Non, Sonatype nest pas seul ! .............................................................................. 258La garantie par lopen-source ............................................................................... 259

    Conclusion .................................................................................................................. 260

    Nos recommandations ................................................................................................ 261Les bonnes bases ........................................................................................................ 261

    Commandement n 1 : Les conventions de Maven tu suivras. ............................. 262Commandement n 2 : Simplicit tu choisiras. .................................................... 262Commandement n 3 : Au fur et mesure de tes besoins, les outils ncessaires tu mettras en place. ............................................................................................... 264Commandement n 4 : De la sur-conception point tu ne feras. ........................... 265Commandement n 5 : Tes outils et ton build jour tu maintiendras. .................. 266Commandement n 6 : Dans un projet, la mme version tous les modules auront. ........................................................................................ 267Commandement n 7 : La gestion des versions tu centraliseras. .......................... 268Commandement n 8 : Comme la peste les dpendances optionnelles tu viteras. ............................................................................................................. 268Commandement n 9 : Les SNAPSHOT tu utiliseras. .......................................... 269Commandement n 10 : LIDE toujours tu privilgieras. ..................................... 269

    Conclusion .................................................................................................................. 271

  • X Apache Maven

    17 pilogue ....................................................................................................................... 273Rcapitulons ............................................................................................................... 274Sortez de lamateurisme ............................................................................................. 274Le mot de la fin ........................................................................................................... 275Qui est qui ? ................................................................................................................ 275

    18

    In

    Maven Livre Page X Mercredi, 14. octobre 2009 7:26 07Les membres francophones de lquipe Maven .................................................... 275Les membres de la communaut Java ................................................................... 281Post-scriptum ........................................................................................................ 283

    Lexique ........................................................................................................................ 285Le petit monde open-source ....................................................................................... 285Les concepts Maven ................................................................................................... 287Ceux qui font tourner Maven ...................................................................................... 291Et tout ce qui tourne autour .................................................................................... 293Liens utiles .................................................................................................................. 294

    dex ................................................................................................................................... 295

  • Table des listings

    Li

    Li

    Li

    Li

    Li

    Li

    Li

    Li

    Li

    Li

    Li

    Li

    Li

    Li

    Li

    Li

    Li

    Li

    Li

    Li

    Li

    Li

    Li

    Li

    Li

    Li

    Maven Livre Page XI Mercredi, 14. octobre 2009 7:26 07sting 1.1 : Les fichiers de compilation utiliss respectivement par Nicolas et par Arnaud 5sting 1.2 : pom.xml ......................................................................................................... 7

    sting 1.3 : Premire excution de Maven ........................................................................ 8sting 1.4 : Seconde excution de Maven sans tlchargement cette fois .................... 9sting 1.5 : Len-tte du fichier POM ............................................................................... 13sting 1.6 : Le bloc build du fichier POM ...................................................................... 14sting 1.7 : Le bloc dependencies du fichier POM ....................................................... 14sting 2.1 : Excution de mvn dependency:tree ........................................................ 30sting 3.1 : Production dun binaire SWF ........................................................................ 51sting 4.1 : Une mthode main de test ............................................................................. 57sting 4.2 : Utilisation dune bibliothque utilitaire dans le test ...................................... 58sting 4.3 : Utilisation de jUnit ......................................................................................... 59sting 4.4 : Accs aux fichiers de test en tant que ressources ........................................... 61sting 4.5 : Construction dun test-jar en mme temps que larchive java du projet .. 66sting 4.6 : Utilisation dune dpendance exploitant la notion de classifier .................... 67sting 5.1 : Un profil ddi aux tests GWT ...................................................................... 75sting 5.2 : Activation dun profil en fonction du systme dexploitation ........................ 77sting 5.3 : Profil contrlant le respect des rgles de codage ........................................... 78sting 5.4 : Prparation dune base de donnes de test "propre" avec le plugin SQL ...... 80sting 5.5 : Configuration du plugin Fitnesse ................................................................... 83sting 6.1 : Erreur de rsolution des dpendances ............................................................ 91sting 7.1 : pom parent du projet ....................................................................................... 109sting 7.2 : Utilisation du plugin Enforcer ....................................................................... 113sting 8.1 : Descripteur de dploiement de notre EJB ...................................................... 124sting 8.2 : Descripteur de dploiement de notre application web ................................... 125sting 8.3 : Test Selenium en syntaxe Java ....................................................................... 129

  • XII Apache Maven

    Listing 8.4 : Configuration du plugin Selenium ................................................................. 130

    Listing 8.5 : Configuration du plugin Surefire pour excuter nos tests Selenium .............. 131

    Listing 8.6 : Configuration du plugin Cargo ...................................................................... 132

    Listing 8.7 : Lancement dOpenEJB embarqu dans un test ............................................. 137

    Li

    Li

    Li

    Li

    Li

    Li

    Li

    Li

    Li

    Li

    Li

    Li

    Li

    Li

    Li

    Li

    Li

    Li

    Li

    Li

    Li

    Li

    Li

    Li

    Li

    Li

    Maven Livre Page XII Mercredi, 14. octobre 2009 7:26 07sting 11.1 : Utilisation du plugin AntRun ...................................................................... 173

    sting 11.2 : En-tte POM du plugin documentaire ......................................................... 175

    sting 11.3 : Notre classe Mojo de base ........................................................................... 176

    sting 11.4 : Construction dun royaume ClassWorlds ddi lexcution de GEACheck 182

    sting 11.5 : Invocation par rflexion de loutil GEACheck ............................................. 183

    sting 11.6 : Le mojo GEACheck en version Groovy ...................................................... 184sting 11.7 : Test unitaire pour un plugin, bas sur le plugin-testing-harness ...... 186

    sting 11.8 : Pseudo-POM charg lors du test .................................................................. 187

    sting 11.9 : Configuration du plugin invoker ............................................................... 188

    sting 11.10 : Script Groovy de contrle de lexcution .................................................. 188

    sting 12.1 : Le descripteur de notre site .......................................................................... 199

    sting 12.2 : Configuration du plugin Sonar ..................................................................... 205

    sting 13.1 : Exploiter le numro de construction de Hudson .......................................... 210

    sting 13.2 : Obtenir le numro de rvision SVN ............................................................. 211

    sting 13.3 : Ajout de mtadonnes dans le MANIFEST ................................................. 213sting 13.4 : Mise en place dune signature GPG ............................................................. 215

    sting 13.5 : Le fichier assembly ...................................................................................... 217

    sting 13.6 : Invocation du assembly:single au cours de la construction du projet ... 219sting 13.7 : Un POM ddi lassembly ........................................................................ 220

    sting 14.1 : Un POM dentreprise pour Geegol .............................................................. 225

    sting 14.2 : Gnration dun nouveau projet partir dun archtype ............................. 226sting 14.3 : Structure de fichiers gnre ........................................................................ 227

    sting 15.1 : Un script simple de build Gradle ................................................................. 243

    sting 15.2 : Un POM Maven 3 bas sur les attributs XML ............................................. 254

    sting 16.1 : Un profil pour viter les plugins trop consommateurs sous m2eclipse ....... 270

    sting 16.2 : Un profil pour activer le cycles de vie reconfigurable de m2eclise 0.9.9 .... 271

  • Prface

    liere

    BiTuwe

    co

    dem

    s'e

    prpav

    plan

    LeMre

    co

    deRa

    Letivsyun

    se

    po

    Maven Livre Page XIII Mercredi, 14. octobre 2009 7:26 07Histoire de Maven

    Maven est n au sein du projet Jakarta Alexandria. Ce projet, aujourd'huiarrt, ft le terreau non seulement de Maven mais aussi d'autres projetscomme Gump et Forrest. Le premier import des sources du prototype eu

    u en aot 2001. Maven vcu pendant environ 5 mois au sein d'Alexandria avant dejoindre sa nouvelle adresse dans le projet Turbine. en que Maven ft ses dbuts dans Alexandria, le test en grandeur nature fut le projetrbine. Turbine tentait de dcoupler ses couches persistance, service, et prsentationb dans des builds spars et j'tais exaspr de devoir grer de multiples scripts dempilation trs semblables. Il n'y avait pas de moyen simple cette poque pour crers modles de scripts Ant, chaque build semblait diffrent. Je trouvais cela incroyable-ent frustrant et futile : personne n'tait intress de savoir comment la constructionffectuait tant qu'elle fonctionnait et qu'elle tait facile utiliser. L'infrastructure d'unojet est incroyablement importante, mais sa valeur rside dans l'application dvelop-e. En consquence le build est souvent nglig et tend vous lcher quand vous enez le plus besoin, par exemple lors de la prparation d'une livraison ou lorsqueusieurs personnes interviennent sur le projet. Dans le projet Jakarta, il y a plusieursnes, il tait rare qu'un build Ant fonctionne tel quel.

    s dveloppeurs de Turbine ont souffert lorsque j'ai essay de faire fonctionneraven, ce que je regrette, mais j'imagine mal comment un nouveau projet peut dmar-r et survivre si personne ne souffre. Je pensais que c'tait pour leur propre bien (je suisnnu pour avoir une opinion ou deux sur le sujet) et, aprs quelques grincements dents, Maven est arriv maturit. Cela me rappelle une de mes citations favorite delph Johsnon et Don Roberts dans Patterns for Evolving Frameworks :s gens crent de l'abstraction en gnralisant des exemples concrets. Toute tenta-e de dfinir l'abstraction correcte sur papier sans dvelopper et excuter unstme rel est condamne l'chec. Personne n'est aussi dou. Un framework este conception rutilisable, donc il se construit en regardant les choses dont il estns tre le modle. Plus vous avez d'exemples sous la main, plus le frameworkurra tre gnrique.

  • XIV Apache Maven

    Je ne savais pas vraiment quoi le rsultat final ressemblerait, mais je savais qu'il devaity avoir une meilleure faon de faire. Pour commencer, je savais ce que je voulais :m un modle pour le projet, pour qu'il n'y ait qu'un seul endroit o aller chercher

    l'information relative au projet ;m

    Lastothje av

    l'imbiprndativsiggrm

    simre

    d

    Bem

    Lam

    so

    on

    no

    inav

    trum

    ba

    Maven Livre Page XIV Mercredi, 14. octobre 2009 7:26 07une structure standardise pour qu'il ne soit pas ncessaire d'aller la pche auxbibliothques, au code source et la documentation.

    chose suivante que je notais tait que tous les JAR dont nous dpendions taientcks sous CVS. Nous perdions de la place en conservant plusieurs copies de biblio-

    ques comme Xerces. chaque fois qu'une nouvelle version de Xerces apparaissait,devais mettre jour chaque projet. Mais plus grave, sans gestion dclarative il n'yait aucun moyen d'effectuer une analyse. Les gens ont tendance sous-estimer

    portance d'une gestion dclarative. Ils se disent que c'est si simple de placer lesbliothques dans le gestionnaire de sources, mais essayez de dcomposer votre grosojet poubelle en composants rutilisables et maintenables, ou d'analyser ce qui seracessaire l'excution entre toutes vos applications avec des dpendances communesns la chane et vous serrez bien ennuy. La vraie puissance de la gestion dclara-e ne tient pas l'conomie de quelques octets de disque (quoique cela puisse trenificatif si on n'y prend pas garde) mais la possibilit d'analyse. Une fois un

    aphe de dpendances en place, tout devient possible. Mais retour l'histoire :aintenant que la gestion dclarative des dpendances existait, il fallait rendre plus

    ple le partage des librairies. Juste aprs avoir cr Maven nous avons cr le rf-ntiel Maven, un rfrentiel de librairies qui est utilis aujourd'hui par la plupart desveloppements Java.

    aucoup de personnes ont eu des soucis avec Maven 1, mais il fonctionnait gnrale-ent bien, et tous les outils dans leur premire gnration souffrent de divers dfauts. seule faon d'aller au del est d'en prendre de la graine et de crer quelque chose de

    ieux pour le coup d'aprs. Nous avons cr Maven 2.0, et aprs plusieurs annes nousmmes sur le point de publier Maven 3.0. Avec tous les retours que les dveloppeurst reu de la part de l'incroyable communaut des utilisateurs de Maven, je pense queus sommes arrivs quelque chose de solide sur lequel nous pouvons itrer. Ne vousquitez pas : Maven 3.0 est 100 % compatible avec l'existant en Maven 2.0 :-) Nousons dsormais une comprhension trs complte sur comment les organisations cons-isent leurs applications, depuis le dveloppement en passant par les tests et jusqu' la

    ise en production. Ce sont toutes ces connaissances qui ont t utilises pour crer lesses de Maven 3.0.

  • Prface XV

    propos de ce livre

    Nicolas et Arnaud ont choisi, avec une approche lgre et rcrative, de proposer unguide aux utilisateurs novices, bas sur l'histoire d'une start-up technologique qui fait lechoix d'utiliser Maven. Le livre couvre toutes les phases du projet, de son originejudno

    m

    Lec'e

    Nihre

    Maven Livre Page XV Mercredi, 14. octobre 2009 7:26 07squ' l'tape finale de livraison et de dploiement d'un produit complet. Les lecteurscouvrent progressivement les bonnes pratiques de Maven travers les utilisations ques experts en font et bnficient de techniques puissantes qu'il faudrait sans cela desois pour apprendre.

    livre Apache Maven n'est pas seulement une introduction pratique Maven, maisst aussi un guide o chaque leon est base sur un exemple. Je pense qu'Arnaud etcolas ont ralis un super travail, demandant beaucoup d'efforts. Je recommande sanssitation cet ouvrage toute personne s'intressant Maven : c'est un ouvrage de rf-nce et de grande valeur pour la communaut Maven.

    Jason Van Zyl,Fondateur du projet Apache Maven

  • Maven Livre Page XVI Mercredi, 14. octobre 2009 7:26 07

  • Avant-propos

    blattse

    n

    Poqulesprso

    MMjam

    ra

    qu

    Il qum

    lisitm

    un

    no

    Plex

    Maven Livre Page XVII Mercredi, 14. octobre 2009 7:26 07Lcriture dun ouvrage technique nest pas une tche triviale, car il estfacile de perdre le lecteur dans une avalanche de concepts thoriques oude sgarer dans des dtails non fondamentaux. Dcrire un outil commeMaven, ou tout simplement le dfinir clairement, tout en restant accessi-

    e tous, est encore plus dlicat : soit on reste trop vague, et le lecteur na plus quendre le Chapitre 5 pour commencer apprendre quelque chose de concret, soit onmbarque dans de longues explications de principes et de concepts et le lecteur

    attendra jamais ce mme Chapitre 5. ur tre honnte, je dois dire que les premires bauches de cet ouvrage sont imman-ablement tombes dans ces travers, ce qui annonait un livre bien peu pertinent pour utilisateurs, quils soient novices ou dj expriments. Lorsque jai soumis les

    emiers jets de ce projet Arnaud, il men a rapidement fait la remarque et nous nousmmes accords sur la forme que nous voulions donner ce livre.

    on objectif est de communiquer ma passion autour de ce projet open-source questaven, lequel runit des dveloppeurs aux parcours trs diffrents. Les rencontres quei faites dans cette communaut ont forg mon approche de linformatique. Avec cette

    otivation, tablir un dictionnaire impersonnel Maven-Franais tait exclu ; aussi jaipidement choisi, en accord avec Arnaud, de privilgier une approche aussi didactiquee possible, btie sur des exemples concrets issus de ma propre exprience du terrain.

    est difficile de sensibiliser les utilisateurs aux enjeux que Maven tente de grer, alorsils y sont pourtant confronts en permanence. Situation intressante o tout leonde rencontre un problme, mais, faute de mettre un nom dessus et den valuermportance, celui-ci reste latent tout au long de la vie du projet, amenant parfois desuations critiques. Nous allons suivre ensemble la vie dun projet fictif, bien que large-ent inspir de situations relles. Il passera par toutes les phases, du prototype crit sur coin de table lapplication stratgique dentreprise de grande envergure, ce quius permettra de couvrir un trs large ventail de situations.

    utt que de dcrire le rle de Maven sur un projet, ou de vous accabler par un longpos thorique sur ses concepts, je prfre au travers de cette dmonstration un peu

  • XVIII Apache Maven

    romance vous montrer les difficults concrtes auxquelles Maven sattaque. Sur labase de ces exemples, parfois volontairement excessifs, je souhaite vous dmontrer demanire ludique les avantages que Maven peut apporter vos projets. Malgr les cari-catures proposes, de nombreuses situations vous sembleront familires. Derrire lafiction se cachent des cas bien rels, que je nai fait quamplifier, et beaucoup auront despor

    Jetexco

    il vo

    en

    prou

    m

    M

    chex

    co

    niqu

    Apjapoav

    1.2.3.4.

    Maven Livre Page XVIII Mercredi, 14. octobre 2009 7:26 07ints communs avec vos propres difficults. Ce parallle vous donnera une imagealiste de Maven et des conseils applicables dans les meilleurs dlais.

    spre que vous apprcierez ce choix et que vous tirerez un enseignement pratique dute qui suit. En particulier, jaimerais quarriv au bout de votre lecture vous soyez

    nscient des objectifs viss par Maven, de sa philosophie et des raisons pour lesquellesdevient un lment cl de la bote outils du dveloppeur. Enfin, je souhaite russir us transmettre mon enthousiasme pour ce projet libre, auquel vous pouvez participer rejoignant le forum pour y exposer vos interrogations, apporter de nouvelles ides,oposer des contributions de toutes sortes et participer lamlioration gnrale de cettil. Arnaud et moi avons commenc de cette faon avant de passer "de lautre ct duiroir", mais au quotidien nous restons comme vous, avant tout, des utilisateurs deaven, soucieux de disposer dun outil pertinent et productif.

    Nicolas De loof

    Lorsque Nicolas ma contact pour crire un ouvrage sur Maven en fran-ais, jai commenc par me demander si cela en valait la peine. Certes, ladocumentation du produit est critiquable. Elle est trs disperse, et il estsouvent difficile de trouver linformation utile lorsquon ne sait pas o la

    ercher entre le site web du projet1, ses nombreux plugins et son wiki2. Pourtant, iliste dsormais deux ouvrages en anglais disponibles gratuitement sur la Toile pourmbler ces manques : Better Builds with Maven3, publi en 2006, et Maven : The Defi-tive Guide4, publi en 2007 et rgulirement mis jour. Alors quapporter de plusune simple traduction en franais de ces ouvrages ?

    rs de nombreuses annes utiliser et prconiser Maven dans des contextes varis,vais envie de partager tout ce que javais pu emmagasiner comme bonnes pratiques etinter sur les mauvaises que javais pu rencontrer. Cest sur ce principe que nousons commenc avec Nicolas btir le squelette de cet ouvrage. Fond sur un projet

    http://maven.apache.org. http://docs.codehaus.org/display/MAVENUSER. MaestroDev (http://www.maestrodev.com). Sonatype, Inc. (http://www.sonatype.com).

  • Avant-propos XIX

    fictif, il retrace nos expriences ainsi que celles des personnes que nous avions croisessur notre chemin et permet dexpliquer les enjeux de Maven dans un projet et dans uneentreprise. Mme si nous navons pas recherch lexhaustivit dans les cas traits, telle-ment ils peuvent tre nombreux, nous avons essay de faire apparatre les plus frquentsou les plus pineux que nous ayons eus rsoudre. Nous avons ax nos efforts sur laprleq

    Jeafi

    Co

    Ce

    m

    m

    m

    m

    Unab

    Maven Livre Page XIX Mercredi, 14. octobre 2009 7:26 07sentation et la comprhension des concepts plutt que sur le dtail du paramtrage,uel peut voluer priodiquement.

    spre que cet ouvrage saura autant vous divertir que vous former sur cet outil completn quil ne soit plus jamais complexe vos yeux.

    Arnaud Hritier

    ntenu

    t ouvrage se compose de quatre parties :

    La premire, du Chapitre 1 au Chapitre 5, aborde les concepts fondamentaux de Mavenet leur mise en uvre pratique. Nous avons choisi de mettre en scne de maniretrs explicite et souvent exagre les problmes que Maven tente de prendre encharge, afin que cette premire partie soit aussi didactique que possible.

    La deuxime, du Chapitre 6 au Chapitre 10, exploite des fonctionnalits plus avan-ces de Maven pour traiter des besoins orients "gros projets dentreprise" mais toutaussi dlicats. Cette partie sadresse typiquement aux dveloppeurs intervenant surdes projets JEE (Java Enterprise Edition) en entreprise.La troisime regroupe les Chapitres 11 15 et couvre des facettes plus spcialiseset moins mises en avant de Maven, mais que nous considrons comme tout aussiessentielles. Vous verrez alors que Maven ne se rsume pas comme on le lit souvent "un outil de compilation".

    Pour terminer cet ouvrage le Chapitre 16 sera loccasion de rsumer les lmentscls prsents, de vous donner nos recommandations, bonnes et mauvaises prati-ques connatre pour tirer le meilleur de Maven. Par ailleurs, nous nous essayerons lexercice acrobatique de la boule de cristal en vous prsentant lavenir du projetMaven. Nous indiquerons comment aller au-del de ce livre en participant lacommunaut qui paule ce projet open-source. Le Chapitre 17 conclura le rcit denotre histoire et vous prsentera les personnes qui nous ont inspir les diffrentsprotagonistes.

    dix-huitime chapitre vous propose un lexique qui claircit les mots quelques peuscons utiliss dans cet ouvrage.

  • Maven Livre Page XX Mercredi, 14. octobre 2009 7:26 07

  • Partie I

    Maven Livre Page 1 Mercredi, 14. octobre 2009 7:26 07Premiers pas avec Maven

  • Maven Livre Page 2 Mercredi, 14. octobre 2009 7:26 07

  • 1Code

    Pr

    prpmqulener

    Lage msimbdures

    Maven Livre Page 3 Mercredi, 14. octobre 2009 7:26 07Introduction

    mmenons donc notre rcit par linvitable mise en garde : toute ressemblance avecs personnes ou des situations existantes ou ayant exist ne serait que fortuite

    ologue

    Nicolas et Arnaud se sont rencontrs au cours dune conf-rence organise par un Java User Group. Faisant connais-sance autour dun verre, ils voquent les souvenirs de leurs

    emiers pas avec Java, devenu depuis leur plateforme de prdilection. Un Java Develo-ent Kit dans une version qui fait sourire aujourdhui, et les bons vieux "Hello World"

    i initient tout dveloppeur un nouveau langage. De nombreux souvenirs qui rappel-t quon a tous dbut un jour, rencontr les mmes problmes et commis les mmes

    reurs idiotes que lon dnonce aujourdhui. premire application un peu intressante de Nicolas tait un splendide outil destion de sa liste de courses. Dun naturel assez dsorganis, Nicolas na jamais russi

    moriser toute la liste. Il lui est mme dj arriv de loublier ou pire, doublier toutplement de faire les courses. Son application tait donc un extraordinaire pense-

    te, quil lanait lavance et qui lui envoyait firement, dix minutes avant son dpart bureau, un message de rappel avec la liste des courses. Autrement dit, un outil deve totalement indispensable, tel point que le code de ce monument de linformatiquet respectueusement conserv quelque part.

  • 4 Premiers pas avec Maven Partie I

    Arnaud, confront au mme souci et amus par cette solution de pur geek, lui demandesil a toujours son programme et sil peut en faire une copie pour satisfaire sa curiosit la geekitude est dangereusement contagieuse !

    Pa

    De(vUSAr

    Poles

    Arce

    es

    Jafapo

    Dedi

    Fig

    La

    Maven Livre Page 4 Mercredi, 14. octobre 2009 7:26 07rtageons !

    retour la maison, Nicolas fouille dans ses archives et en retire une vieille disquetteous savez, ces carrs de plastique quon utilisait "dans le temps", avant que la clB et Internet ne les fassent disparatre). Il envoie donc le trsor tant convoit naud.

    ur vous faire une meilleure ide de cette exceptionnelle construction logicielle, voici fichiers qui la constituent :

    naud, qui, semble-t-il, na vraiment que cela faire de son temps libre, se jette surtte magnifique relique des annes Java 1.1 et tente de le compiler. Seulement, Arnaudt un utilisateur Mac. Le fichier BAT qui compile et assemble le logiciel en une archiveva JAR est inexploitable sur son systme. Arnaud nest pas du genre se dcourager sicilement, aussi crit-il un fichier de compilation adapt son environnement afin deuvoir tester ce chef-duvre de linformatique.

    ux jours plus tard, profitant dun peu de rangement, Nicolas retrouve une autresquette contenant une version plus avance de son logiciel, qui utilise les fonctions

    ure 1.1

    structure originale du projet "noubliepaslalistedescourses".

  • Chapitre 1 Introduction 5

    dune bibliothque utilitaire pour lire le fichier contenant la liste des courses. Il lenvoiedonc Arnaud, qui une nouvelle fois doit crire son propre fichier de compilation.

    Le "projet" tant trivial, la traduction du build.bat en build.sh est rapide. Voici pourcomparaison les deux fichiers utiliss respectivement par Nicolas et Arnaud. Les diff-re

    pode

    Lis

    Deprdudesydide

    Suci po

    ArSoco

    @esesese

    mkjajabu

    Maven Livre Page 5 Mercredi, 14. octobre 2009 7:26 07nces sont minimes mais ncessitent une reprise manuelle chaque modification,uvant introduire des disparits, voire des incompatibilits entre les environnements nos deux compres, qui peuvent leur faire perdre un temps prcieux.

    ting 1.1 : Les fichiers de compilation utiliss respectivement par Nicolas et par Arnaud

    nombreux projets industriels ou communautaires sont confronts ce mmeoblme et sont obligs de maintenir deux versions (ou plus) du script de construction logiciel, soit parce que lquipe nest pas homogne, soit parce que lenvironnement test ou de production nest pas quivalent celui de dveloppement. Mme sur desstmes dexploitation identiques, les outils peuvent tre installs des emplacementsffrents, ce qui oblige prvoir dans le script un ensemble de proprits que chacunvra renseigner en fonction de sa configuration.

    r Unix, ce problme a t trait depuis longtemps par loutil make. Cependant, celui-nest pas facilement exploitable sur les machines Windows, omniprsentes commestes de dveloppement.

    naud raconte ses dboires son collgue Olivier. Ce dernier, utilisateur du systmelaris, sest souvent trouv face ce problme ; il lui propose dutiliser un fichier demmande universel, bas sur loutil Apache Ant.

    cho offt JAVA_HOME=C:\jdk1.3t PATH=%JAVA_HOME%\bint CLASSPATH=lib\mail.jar;lib\activation.jar

    dir buildvac -d build src\*.javar cf noubliepaslalistedescourses.jar ild\*.class

    #!/bin/bashexport JAVA_HOME=/opt/jdk1.3export PATH=$JAVA_HOME/binexport CLASSPATH=lib/mail.jar:lib/activation.jar

    mkdir buildjavac -d build src/*.javajar cf noubliepaslalistedescourses.jar build/*.class

  • 6 Premiers pas avec Maven Partie I

    Les fourmis la rescousse

    Quest-ce que cest que ce "Ant" ? Faisons un dtour par Wikipdia pour nous en faireune ide :

    AnmedLeAnmaPadofin

    Antopa s

    pe

    Au

    tiorFaco

    ja

    vspo

    1.

    Maven Livre Page 6 Mercredi, 14. octobre 2009 7:26 07INFO

    t est un projet open-source de la fondation Apache, crit en Java, qui vise le dveloppe-nt dun logiciel dautomatisation des oprations rptitives tout au long du cycle developpement logiciel, linstar des logiciels Make1. nom est un acronyme pour Another Neat Tool (un autre chouette outil).t est principalement utilis pour automatiser la construction de projets en langage Java,is il peut ltre pour tout autre type dautomatisation dans nimporte quel langage.

    rmi les tches les plus courantes, citons la compilation, la gnration de pages HTML decument (Javadoc), la gnration de rapports, lexcution doutils annexes (checkstyle,dbugs, etc.), larchivage sous forme distribuable (JAR, etc.).

    t a connu un succs exceptionnel et occupe une place de choix dans la panoplie deut dveloppeur. Aucun logiciel ddi Java ne peut aujourdhui se permettre de nes fournir des tches Ant. Le choix de cette solution semble donc la meilleure marcheuivre !

    Pour lui faciliter la tche, Olivier envoie Arnaud un script Ant, appel avecbeaucoup doriginalit build.xml, quil utilise lui-mme sur la plupart deses projets, et qui est donc rod et bourr doptions et de paramtres indis-

    nsables permettant de le plier tous les besoins courants.

    rait-on trouv avec Ant la solution miracle, rassemblant tous les suffrages ?

    Pas si simple : Nicolas, de son ct, dsol davoir caus tant de soucis Arnaud, a reu le mme conseil de Fabrice, qui lui aussi a propos un scriptde commandes Ant tout faire, prouv par de nombreuses annes dutilisa-

    n. Le fichier dOlivier suppose que les fichiers sources java sont stocks dans unpertoire sources et que les bibliothques java sont places sous libraries. Celui debrice fait des choix diffrents, respectivement java et libs. De plus, la commande dempilation pour le fichier dOlivier est ant package alors que celle de Fabrice est antr. La fusion de ces deux fichiers, chacun apportant des options intressantes, est unritable casse-tte. Rapidement, les quatre compres, qui commencent se prendre aurieux avec leur liste de courses, font appel des connaissances spcialistes dAntur les assister dans cette lourde tche.

    Source : http://fr.wikipedia.org/wiki/Apache_Ant.

  • Chapitre 1 Introduction 7

    Ant a donc cr un nouveau mtier dans le microcosme informatique : expert en scriptAnt ! Certains projets semblent jouer pour le concours du script le plus inutilementtordu, mixant des paramtres nen plus finir (que personne na dailleurs jamais eubesoin de modifier) et prenant en charge des cas de figure qui tiennent de lexpressionartistique, le tout en important dautres fichiers de script pour viter lignoble copier-co

    or

    co

    Prlibprzo

    vo

    Et

    co

    irrtarinco

    Vo

    Lis

    4.0.0fr.noubliepaslalistedescoursesnoubliepaslalistedescourses0.0.1-SNAPSHOT

    src

    javax.mail mail 1.4

  • 8 Premiers pas avec Maven Partie I

    commons-io

    commons-io

    1.4

    mpar aux fichiers Ant tests jusquici, ce fichier "pom.xml" quel drle de nom ressemble rien de connu. Pas de directive de compilation, pas dindication dordrens les tches, pas de commande dassemblage du JAR. O est le secret ?

    ue fait Maven ?

    luchons point par point les consignes de Jason et voyons.installation de Maven proprement parler se rsume dsarchiver un fichier ZIP et finir la variable PATH pour y ajouter le chemin vers le rpertoire apache-maven/bin.faut aussi sassurer davoir la variable denvironnement JAVA_HOME qui indiquemplacement du JDK (Java Development Kit), ce qui est gnralement le cas sur leste de travail des bons dveloppeurs. La construction du projet seffectue ensuite viacommande mvn package depuis la ligne de commande. Rien de bien rvolutionnairenc par rapport au script Ant que nous avions envisag.

    son nous a indiqu que Maven ncessitait une connexion Internet. Linstallationest donc pas complte, et Maven va rechercher sur le rseau les lments manquants.fectivement, la premire excution de Maven se traduit dans la console par une srie messages de tlchargements divers :

    ting 1.3 : Premire excution de Maven

    \noubliepaslalistedescourses>mvn package

    NFO] Scanning for projects...

    NFO] ------------------------------------------------------------------------

    NFO] Building Unnamed - fr. ubliepaslalistedescourses:noubliepaslalistedescourses:jar:0.0.1-SNAPSHOT

    NFO] task-segment: [package]

    NFO] ------------------------------------------------------------------------

    wnloading: http://repo1.maven.org/maven2/org/apache/maven/plugins/maven-resources-

    plugin/2.2/maven-resources-plugin-2.2.pom

    downloaded

    wnloading: http://repo1.maven.org/maven2/org/apache/maven/plugins/maven-plugins/1/

    maven-plugins-1.pom

    downloaded

  • Chapitre 1 Introduction 9

    Downloading: http://repo1.maven.org/maven2/org/apache/maven/maven-parent/1/maven-parent-1.pom6K downloadedDownloading: http://repo1.maven.org/maven2/org/apache/apache/1/apache-1.pom3K downloaded...

    Cedclatosu

    Lacosuqu

    Polig

    Lis

    D:[I[I[I[I[I[I[I[I[I[I[I[I[I[I[ID:

    -- T--Th

    Maven Livre Page 9 Mercredi, 14. octobre 2009 7:26 07tte liste de messages semble mme interminable et avoir t conue pour favoriser leveloppement dInternet haut dbit. Tout a pour notre projet compos de troissses ? Jason nous a prvenus qu la premire utilisation, Maven semble tlcharger

    ut Internet, mais il nous a promis des explications ! Mise en garde quelque peurprenante, mais laissons-lui le bnfice du doute.

    INFO

    mise en garde de Jason est judicieuse car de nombreux utilisateurs sont surpris par cemportement de Maven et sa dpendance une connexion Internet. Nous verrons par laite ce qui impose ce mode de fonctionnement et en quoi cela sert les utilisateurs plutte de les contraindre.

    ursuivons lanalyse des messages que Maven trace dans la console, en ignorant lesnes lies ces tlchargements tranges mais apparemment ncessaires :

    ting 1.4 : Seconde excution de Maven sans tlchargement cette fois

    \noubliepaslalistedescourses>mvn packageNFO] Scanning for projects...NFO] ------------------------------------------------------------------------NFO] Building Unnamed - fr.maven:noubliepaslalistedescourses:jar:0.0.1-SNAPSHOTNFO] task-segment: [package]NFO] ------------------------------------------------------------------------NFO] [resources:resources]NFO] Using default encoding to copy filtered resources.NFO] [compiler:compile]NFO] Compiling 3 source files to D:\java\workspace\malistedecourses\target\classesNFO] [resources:testResources]NFO] Using default encoding to copy filtered resources.NFO] [compiler:testCompile]NFO] Nothing to compile - all classes are up to dateNFO] [surefire:test]NFO] Surefire report directory: \java\workspace\malistedecourses\target\surefire-reports

    ----------------------------------------------------- E S T S-----------------------------------------------------ere are no tests to run.

  • 10 Premiers pas avec Maven Partie I

    Results :

    Tests run: 0, Failures: 0, Errors: 0, Skipped: 0

    [INFO] [jar:jar]

    [I

    [I

    [I

    [I

    [I

    [I

    [I

    [I

    Nofic"r

    sp

    La

    Indopse

    fo

    Fig

    Le

    Maven Livre Page 10 Mercredi, 14. octobre 2009 7:26 07NFO] Building jar: D:\java\workspace\malistedecourses\target\malistedecourses-0.0.1-

    SNAPSHOT.jar

    NFO] ------------------------------------------------------------------------

    NFO] BUILD SUCCESSFUL

    NFO] ------------------------------------------------------------------------

    NFO] Total time: 15 seconds

    NFO] Finished at: Fri Jan 02 17:02:09 CET 2009

    NFO] Final Memory: 6M/13M

    NFO] ------------------------------------------------------------------------

    us constatons que Maven a compil nos trois fichiers sources et construit unhier JAR, ce quon attendait de lui, mais il a galement tent de copier des

    essources" et dexcuter des tests, ensemble de traitements que nous navonscifis nulle part !

    cl du mystre

    terrog sur le sujet, Jason nous livre la cl du mystre : Ant, make et bon nombreoutils similaires sappuient sur une approche procdurale, pour laquelle on dcrit lesrations accomplir pour construire le logiciel ou excuter des tches annexes. Cela traduit donc par une suite de commandes, qui prendra dune faon ou dune autre larme dcrite la Figure 1.2.

    ure 1.2

    s tapes lmentaires de construction dun projet.

    Initialiser

    Ncessite

    Ncessite

    Prparer les rpertoires de travail

    Invoquer le compilateur javac

    Invoquer larchiveur jar

    Compiler

    Assembler

    tape Traitement

  • Chapitre 1 Introduction 11

    Cette approche fonctionne trs bien et permet de faire peu prs tout ce quon veut,mais elle ncessite :

    m de rpter pour chaque nouveau projet une liste de tches trs similaires, ce quise traduit souvent par la copie dun fichier de configuration considr comme

    m

    MJaaloquM

    Co

    Nose

    rMprun

    Mclet nm

    Jadano

    un

    Arco

    se

    peun

    Latabex

    Maven Livre Page 11 Mercredi, 14. octobre 2009 7:26 07"faisant rfrence" ;de grer une liste de dpendances entre les tapes cls, comme, dans notre exemple,"compiler" lorsquon dsire assembler le JAR.

    aven choisit une approche diffrente, fonde sur le constat suivant : tous les projetsva vont suivre peu ou prou le mme schma. Les dveloppeurs de Maven considrentrs quil est plus simple de dcrire en quoi un projet est diffrent de ce "scnario type"e de rpter invariablement des commandes trs comparables dun projet lautre.aven exploite donc le concept trs structurant de conventions.

    nvention plutt que configuration

    tre pseudo-exemple runissant les tapes "initialiser", "compiler", "assembler"mble sappliquer nimporte quel projet informatique, alors pourquoi devons-nouspter cette dclaration pour chaque projet ? Cest exactement la question que soulveaven et laquelle il rpond simplement : tout projet Java passe par une phase deparation, de compilation puis dassemblage. Ces trois phases ne sont pas propres projet, mais lies au dveloppement informatique et sappliquent tous. aven dfinit donc un scnario type de construction dun projet Java, avec des tapess prdfinies et dont lordre est immuable. Ce "cycle de vie" est suffisamment largeconsensuel pour tre applicable quasiment tous les projets. En admettant que letre nait rien de particulier compar tous ceux que pilote Maven, nous comprenonsieux comment celui-ci a "devin" les oprations ncessaires sa construction.

    va Entreprise Edition suit galement cette piste en proposant un environnement stan-rdis et un format de livraison commun pour les applications, mme sil existe dembreux serveurs dapplications ayant des caractristiques trs varies. Construiree application web Java consiste assembler une archive WAR (Web Applicationchive), que lon ait choisi JBoss, Webpshere, Tomcat ou Jetty pour lexcuter. Lemportement "par convention" dune application web est dfini par une norme, chaquerveur proposant des options de configuration pour bnficier dun comportementrsonnalis lorsque cest ncessaire. Une convention a, bien sr, un statut infrieur e norme comme JEE, mais elle apporte la mme simplification.

    force des conventions est doffrir ceux qui les suivent un outil directement exploi-le, sans configuration complmentaire. Une convention de Maven concerne par

    emple lemplacement des fichiers sources Java compiler. Notre fichier pom.xml

  • 12 Premiers pas avec Maven Partie I

    contient effectivement une indication sourceDirectory que nous faisons pointer sur lerpertoire src. Cette indication naurait pas t ncessaire si nous avions suivi laconvention. Il nous suffit de ladopter pour allger dautant notre configuration Maven.

    Nous verrons en dtail plus loin les diverses conventions prconises par Maven.CepaMca

    co

    Mbees

    so

    D

    NotanJDcu

    ficdu

    Lam

    au

    De

    PO

    Av

    Toduloles

    Letiom

    qude

    Maven Livre Page 12 Mercredi, 14. octobre 2009 7:26 07rtains trouveront cette structure inutilement complexe, peu pratique, ou au contrairerfaitement adapte leurs habitudes. Lessentiel nest pas l, mais dans le fait queaven propose une organisation par dfaut, qui peut fonctionner sans plus dindi-tions pour tout projet qui la respecte. La force de Maven est de prsenter une structurenventionnelle, qui vite chacun un travail rbarbatif de configuration.

    aven reposant sur un scnario type de construction de projet Java, nous navons plussoin dindiquer la moindre commande. Il nous suffit de dcrire en quoi notre projett diffrent de ce cas strotyp. Nous passons dune approche programmatique unelution dclarative.

    crire plutt que programmer

    tre fichier pom.xml de Maven ne compte aucune commande de compilation et, pour-t, il se traduit au final par lexcution des outils de compilation et dassemblage duK. Maven fait le choix dune approche dclarative, dans laquelle on indique les parti-larits du projet et non la manire de le construire. On prcise lemplacement deshiers sources, les bibliothques qui sont ncessaires, plutt que la ligne de commande compilateur.

    diffrence est trs significative, car il ne sagit plus de dfinir les options de javac,ais de dcrire une structure plus gnrale du projet, qui pourra tre exploite dans untre contexte. Elle sera, par exemple, utilise pour sintgrer dans un IDE (Integratedvelopment Environment) comme Eclipse ou par les outils danalyse de code.

    M

    ec ces explications, revenons prsent sur le fichier pom.xml que Jason nous a crit.

    ut dabord, pourquoi ce nom ? Nous avons vu que ce fichier ne dcrit pas la proc-re de construction du projet mais quil rassemble des lments descriptifs. Il est doncgique quil ne sappelle pas build.xml (en dehors du conflit que cela introduirait avec utilisateurs dAnt). s trois lettres POM sont en fait lacronyme de Project Object Model. Sa reprsenta-n XML est traduite par Maven en une structure de donnes riche qui reprsente le

    odle du projet. Ces dclarations sont compltes avec lensemble des conventionsi viennent ainsi former un modle complet du projet utilis par Maven pour excuters traitements.

  • Chapitre 1 Introduction 13

    La premire partie du POM permet didentifier le projet lui-mme.

    Listing 1.5 : Len-tte du fichier POM

    4.0.0

  • 14 Premiers pas avec Maven Partie I

    La deuxime partie du POM concerne la construction du projet :

    Listing 1.6 : Le bloc build du fichier POM

    e nouvelle fois, lapproche dclarative prend le dessus : nous nindiquons pasmplacement physique de ces bibliothques, savoir /lib pour notre projet, mais des

    entifiants groupId + artifactId + version. Il sagit des mmes identifiants deoupe, de composant et de version, que nous venons de rencontrer, appliqus unebliothque. Nous indiquons, par exemple, que nous utilisons lAPI standard JavaMail version 1.4.

    us avons ici une rponse partielle notre question sur la ncessit dun accs Inter-t : Maven va tlcharger les bibliothques indiques, partir dune source fiable,utt que de se contenter des fichiers JAR prsents dans le rpertoire /lib et dont larsion et lorigine sont incertaines. Lespace contenant lensemble des biblioth-es tlcharges est un dpt darchives local (local repository) et respecte unenvention. Nous verrons en dtail au Chapitre 2 les raisons de cette approche et sesantages.

  • Chapitre 1 Introduction 15

    Pourquoi adopter ces conventions ?

    Nous venons de le voir, Maven propose un ensemble de conventions qui permettentdoutiller le projet avec peu de configuration. Il ne nous interdit cependant pas de choisirnos propres conventions, comme le rpertoire src pour les sources du logiciel.

    Daligchop

    pem

    riear

    prlivde

    PapeM

    Leav

    co

    prphloM

    EnMJapeguco

    lo

    Maven Livre Page 15 Mercredi, 14. octobre 2009 7:26 07ns ce cas, pourquoi adopter les conventions de Maven, alors quil suffit de quelquesnes de dclaration supplmentaires pour "plier" Maven nos habitudes ? Hostiles auangement, comme une grande majorit des tres humains, nous prfrons cettetion.

    Cest ce moment quEmmanuel se propose de nous rejoindre, lui aussi temps perdu grce son boulot en or, pour enrichir notre projet dun grandnombre de nouvelles fonctionnalits. Emmanuel est dj habitu Maven et

    ut donc tre rapidement productif et nous aider le configurer correctement. Seule-ent, les choses ne se passent pas aussi simplement que prvu, car malgr son exp-nce de loutil, Emmanuel ne retrouve pas ses petits : pour ajouter des tests notre

    chitecture, il doit crer un nouveau rpertoire de sources, indpendant de celles duojet. Or notre rpertoire src na quun seul niveau et ne permet pas de diffrencier lerable des tests. Il est donc oblig de dclarer une nouvelle drogation aux conventions Maven.

    r ailleurs, mme si les diffrences sont minimes, il est contraint dadapter toutes sestites habitudes notre structure de rpertoire, qui nest pas "strictement conformeaven".

    s conventions de Maven ne sont pas obligatoires, cependant rflchissez deux foisant de vouloir en imposer dautres pour votre projet. Dune part, vous allez vousmpliquer inutilement la tche en ne profitant pas du comportement par dfaut queopose Maven, et chaque nouvelle option active pourra se traduire par une nouvellease de configuration. moins dtre passionns par lditeur XML, peu de dve-ppeurs prennent du plaisir perdre un temps prcieux dans des fichiers de configuration,aven ou autres.

    suite, pensez la gestion de vos quipes et lintgration de nouveaux dveloppeurs.aven offre loccasion de dfinir une fois pour toutes la structure de tous vos projetsva, de manire homogne. Un dveloppeur pourra passer dun projet un autre sansrdre son temps apprendre les petites habitudes locales : o sont les fichiers de confi-ration ? Dans quel rpertoire place-t-on les donnes de test ? Tous les projets qui senforment aux conventions Maven seront identiques de ce point de vue, et le dve-ppeur sera plus rapidement productif.

  • 16 Premiers pas avec Maven Partie I

    Enfin, contrairement une politique "maison" qui aurait pu tablir ce type de conven-tions, celles de Maven sont partages par la majorit des dveloppeurs qui ont adopt celogiciel. Tout nouveau membre de votre quipe qui a dj travaill sur un projet Maventrouvera rapidement ses repres. Maven et ses conventions deviennent au fil des annesle standard de facto dans le monde professionnel Java car un dveloppeur trouve imm-di

    Lachun

    La

    ReprIl ta

    Lla adco

    trinfa

    Mno

    deNoch

    Enno

    et fipe

    Laduco

    to

    Maven Livre Page 16 Mercredi, 14. octobre 2009 7:26 07atement ses marques lorsquil aborde un nouveau projet. force des conventions de Maven nest pas dans le nom des rpertoires qui ont toisis, mais dans le fait quil offre la communaut des dveloppeurs Java tout entiree base commune.

    force de Maven

    venons un peu en arrire : le projet initial, que nous pouvons considrer comme unototype, tait difficilement exportable en dehors de lenvironnement de son crateur.ncessitait un script de compilation la fois indispensable et sans grande valeur ajoute,nt dune grande banalit.

    adoption dAnt aurait pu partiellement rsoudre le problme, mais pour tirer parti derichesse des outils qui peuvent lui tre greffs, il aurait fallu que tous les scripts Antoptent une structure de base commune. En labsence dune convention dans lammunaut Ant pour les lments principaux qui gouvernent un projet Java, il peute extrmement dlicat de rutiliser et de fusionner des lments provenant de sources

    dpendantes. Enfin, tout ce travail aurait t ralis par des copier-coller quil auraitllu rpter pour notre prochain projet.aven propose de passer une approche dclarative, dans laquelle nous considreronstre projet comme une variation sur un thme commun. Nous ne nous soucions plus savoir quelle opration doit suivre quelle autre lors de la construction du logiciel.us dclarons juste les quelques lments spcifiques qui font de notre projet quelque

    ose dunique.

    adoptant des conventions, nous rduisons quelques lignes les informations queus devons dclarer pour que le projet soit pris en charge par Maven. La maintenancelajout de nouvelles tches au cours de la construction du projet sen trouvent simpli-s. Un dveloppeur, issu dun contexte trs diffrent mais dj utilisateur de loutil,ut prendre le projet en main sans difficult particulire. combinaison de conventions et dune approche innovante fonde sur la description projet fait de Maven un outil part, trs diffrent dAnt ou de ses quivalents. Auurs des chapitres qui suivent, nous allons voir en quoi cette approche se gnralise utes les tches qui accompagnent la vie dun projet.

  • 2D

    Avquno

    un

    et na

    Ve

    Codethse

    gthex

    Nor

    Q

    Lano

    dutioHi

    Maven Livre Page 17 Mercredi, 14. octobre 2009 7:26 07Au-del de java.lang

    es JAR sous CVS

    ec une quipe qui se compose dsormais de cinq dveloppeurs motivs, il nest plusestion de senvoyer par e-mail des archives du projet pour transmettre aux autres lesuvelles fonctions que lon vient de dvelopper. Un projet en mode collaboratif utilise outil de gestion de sources pour partager le code, synchroniser les dveloppementsgrer les conflits lorsque deux personnes travaillent sur le mme fichier. Ce gestion-ire de sources (SCM Source Control Management) est typiquement CVS (Concurrentrsion System), Subversion ou, plus rcemment, Git.mme son nom lindique, cet outil est prvu pour contenir des fichiers sources et nons binaires issus dune compilation. Pourtant, de nombreux projets placent les biblio-ques et les outils ncessaires au projet dans leur gestionnaire de sources. Lide peutmbler bonne a priori, car elle vise grer avec un unique outil et, de manire homo-ne, tous les lments ncessaires au dveloppement du projet. Sauvegarder les biblio-ques Java dans le SCM est donc une garantie de retrouver tout moment la versionacte qui est utilise par le projet. tre prototype ne droge pas cette "bonne ide" et possde comme tant dautres un

    pertoire lib avec lensemble des bibliothques utilises.

    uand le rpertoire lib explose

    croissance de lquipe nous permet de rapidement amliorer notre prototype. Lembre de bibliothques ncessaires au projet augmente. Nous commenons par intro-ire Spring pour rendre le code plus volutif avec lutilisation des concepts de linjec-n de dpendances. Ensuite, nous remplaons tout le code crit en JDBC parbernate et Java Persistence API. Nous dveloppons une interface web sympathique

  • 18 Premiers pas avec Maven Partie I

    base sur Wicket et, enfin, nous faisons appel Apache CXF pour exposer nos services dautres applications sous forme de services web.

    Le nombre de bibliothques croit exponentiellement car, au-del de la gestion de cellesque nous utilisons explicitement au sein du projet, il faut grer toutes les bibliothquesqude

    Lebi

    Dches

    sa

    ra

    poSe

    Aupeno

    Ceten

    se

    peex

    to

    UnApno

    utun

    LeZIJa

    1.

    Maven Livre Page 18 Mercredi, 14. octobre 2009 7:26 07i leur sont ncessaires. Rapidement, le rpertoire lib se retrouve charg de dizaines fichiers JAR avec des noms plus ou moins htroclites.

    s choses se compliquent alors significativement et la moindre mise jour dunebliothque relve dun casse-tte chinois.

    une part, cette pratique encourage utiliser ces bibliothques telles quelles, sansercher sassurer de leur origine ou de la fiabilit de leur tlchargement. Comme ilt dlicat de comparer deux versions dun fichier binaire, il nous est impossible devoir en quoi notre fichier util.jar diffre de celui utilis sur un autre projet compa-ble, dont nous voulons importer des classes intressantes. Mme si ces deux fichiersrtent le mme nom et ont la mme taille, cela ne signifie pas quils soient identiques.ule une comparaison binaire pourrait nous en assurer.

    tant dire quavec les dizaines de bibliothques embarques dans notre projet, plusrsonne ne fait scrupuleusement cette vrification et nous nous contentons de lire lem de larchive mail-1.2.jar pour identifier la bibliothque JavaMail.

    la nous amne un second problme possible. Supposons que cette bibliothque ait corrompue lors de son tlchargement depuis le site de SUN qui la diffuse ou de sonregistrement dans notre SCM. Un transfert rseau nest jamais 100 % garanti, et unul bit modifi peut rendre la bibliothque inutilisable, sans parler de ces charmantstits virus qui peuvent traner un peu partout. Lidentification du problme peut tretrmement complexe, car la remise en cause de la bibliothque sera probablement laute dernire hypothse que nous voquerons pour justifier un dysfonctionnement.

    bogue est dtectrs quelques heures de tests et de recherche dinformations sur Internet, nous devonsus rendre lvidence, nous rencontrons un bogue connu de la bibliothque JavaMaililise sur le projet. Seule solution viable : la mise jour de cette bibliothque danse version plus rcente.

    tlchargement de la distribution JavaMail depuis le site de SUN1 donne un fichierP contenant la fois les binaires et la documentation de cette API ; les binaires, carvaMail regroupe en fait plusieurs archives JAR, savoir mail.jar, mais aussi

    http://java.sun.com/products/javamail/.

  • Chapitre 2 Au-del de java.lang 19

    mailapi.jar. La premire contient lensemble du code public JavaMail alors que laseconde ne comprend que les API de programmation, et pas la gestion des protocoles detransfert de messages (pop, smtp, imap) qui sont optionnels. Lequel utilisons-nousactuellement ? Par quoi le remplacer ?

    Ensu

    Cetiopoer

    so

    Pove

    oun

    dece

    grm

    pa

    Levadaab

    libPolatplrfic

    CeDpeCl

    Maven Livre Page 19 Mercredi, 14. octobre 2009 7:26 07 supposant que nous sachions rpondre sans ambigut cette question, nous devonspprimer le mail-1.2.jar utilis jusquici et ajouter le nouveau mail-1.4.1.jar.la nous impose de modifier tous nos scripts de gestion du projet (scripts de compila-n et de lancement, fichiers de configuration Eclipse, NetBeans ou IntelliJ Idea)ur tenir compte de ce changement, avec le risque dintroduire, par mgarde, desreurs. Ce simple changement nous oblige donc la fois faire preuve de beaucoup dein et vrifier le fonctionnement de nos scripts.

    ur viter ces risques, une seconde option consiste ne pas indiquer de numro dersion pour les bibliothques. Nous utilisons le nom de fichier mail.jar et le rempla-ns purement et simplement par le nouveau fichier en cas de mise jour. Ayons alorse pense compatissante pour les quipes de maintenance qui, dans quelques annes,vront deviner la version exacte des bibliothques utilises sur notre projet, dontrtaines seront devenues plus ou moins obsoltes et connues pour certains boguesaves. Le problme devient encore plus complexe lorsquon doit utiliser une versionodifie dune bibliothque, par exemple parce quon y a intgr un correctif qui nests encore pri