Apache Maven 2 en entreprise… Comment tuer son projet avec Maven ? Comment le réussir ? 15 Juin 2009
Arnaud Héritier <ul><li>Committer depuis 2004 </li></ul><ul><li>Membre du PMC  (Project Management Committee) depuis 2005 ...
Arnaud Héritier <ul><li>Aujourd’hui - OCTO Technology </li></ul><ul><ul><li>Cabinet d’architectes en SI </li></ul></ul><ul...
Programme <ul><li>Faire le choix Maven </li></ul><ul><li>Mettre en place Maven </li></ul><ul><li>Utiliser Maven au jour le...
Programme <ul><li>Faire le choix Maven </li></ul><ul><ul><li>Pourquoi Maven ? </li></ul></ul><ul><ul><li>Les intérêts pour...
Pourquoi Maven ?
Construction d’un war en 2002 <ul><li>Utilisation d’Eclipse limitée </li></ul><ul><ul><li>Pas de WTP (uniquement dans la v...
Construction d’un war en 2002 <ul><li>Beaucoup de tâches manuelles </li></ul><ul><ul><li>Modifier les fichiers de paramétr...
Construction d’un war en 2002 <ul><li>Un seul problème,  Y’a toujours des problèmes </li></ul><ul><ul><li>Erreur dans la c...
Une première réponse : ANT <ul><li>Ecriture d’un script </li></ul><ul><ul><li>Permet d’automatiser le process </li></ul></...
Les limites de ANT <ul><li>Ecrire le script, c’est long </li></ul><ul><li>Modifier un script, c’est très long </li></ul><u...
La réutilisation de scripts ANT <ul><li>Les scripts ne sont pas directement réutilisables  </li></ul><ul><ul><li>Structure...
Quelques exemples <ul><li>J u nit :  http://junit.cvs.sourceforge.net/viewvc/junit/junit/build.xml?view=markup </li></ul><...
Les intérêts de Maven pour un projet
Maven, le choix Projet <ul><li>Le projet peut-être librement découpé en modules </li></ul><ul><ul><li>Maven ne cristallise...
Maven, le choix Projet <ul><li>Centralise et automatise les différents aspects du développement de logiciels </li></ul><ul...
Les intérêts de Maven pour une entreprise
Maven, le choix Entreprise <ul><li>Standard du marché </li></ul><ul><ul><li>Disponibilité des ressources </li></ul></ul><u...
Maven, le choix Entreprise <ul><li>Rationnaliser les coûts </li></ul><ul><ul><li>On ne réinvente pas la roue à chaque nouv...
LA solution ?
Maven, LA solution ? <ul><li>NON !!! </li></ul><ul><ul><li>Maven ne répond pas à tous les besoins </li></ul></ul><ul><li>C...
Programme <ul><li>Faire le choix Maven </li></ul><ul><li>Mettre en place Maven </li></ul><ul><ul><li>KISS </li></ul></ul><...
KISS
K.I.S.S. <ul><li>Keep It Simple, Stupid </li></ul><ul><li>Partez de rien </li></ul><ul><li>Ne faites pas de sur-architectu...
Sécurisation de l’environnement
Sécurisez ! <ul><li>Mettez en place un gestionnaire de proxy des repositories externes </li></ul><ul><li>Pour se prémunir ...
Sécurisez ! <ul><li>Différents produits gratuits ou payants </li></ul><ul><ul><li>Sonatype Nexus (remplaçant de Proximity)...
Settings avec un miroir global <ul><li><settings>   <mirrors>   <mirror>   <!--This sends everything else to /public -->  ...
Industrialisation des développements
Industrialisez ! <ul><li>Partagez vos livrables :  </li></ul><ul><ul><li>Référentiels d’artifacts </li></ul></ul><ul><li>P...
Industrialisez ! <ul><li>Partagez vos versions recommandées d’artifacts :  </li></ul><ul><ul><li>POM de dependencyManageme...
Industrialisez ! <ul><li>Mettez en place une démarche de tests </li></ul><ul><ul><li>Tout l’outillage est pré-intégré : </...
Industrialisez ! <ul><li>Mettez en place une démarche qualité </li></ul><ul><ul><li>Uniformisation du code (CheckStyle) </...
Sonar
Industrialisez ! <ul><li>Mettez en place un serveur d’intégration continue </li></ul><ul><ul><li>Environnement neutre </li...
Hudson
Programme <ul><li>Faire le choix Maven </li></ul><ul><li>Mettre en place Maven </li></ul><ul><li>Utiliser Maven au jour le...
Structurer son projet
Structurer son projet <ul><li>A ne pas faire : </li></ul><ul><ul><li>Ne pas utiliser les conventions </li></ul></ul><ul><u...
Structurer son projet <ul><li>A ne pas faire : </li></ul><ul><ul><li>Avoir un trop grand nombre de modules dans un même pr...
Structurer son projet <ul><li>A faire : </li></ul><ul><ul><li>Utiliser l’héritage « naturel » : Le reactor sert de parent ...
Structurer son POM
Structurer son POM <ul><li>A ne pas faire : </li></ul><ul><ul><li>Dépendances : </li></ul></ul><ul><ul><ul><li>Confondre d...
Structurer son POM <ul><li>A ne pas faire : </li></ul><ul><ul><li>Profils : </li></ul></ul><ul><ul><ul><li>Se rendre dépen...
Structurer son POM <ul><li>A faire : </li></ul><ul><ul><li>Fixer les versions des dépendances dans le dependencyManagement...
Pratiques de développement
Pratiques de développement <ul><li>A ne pas faire : </li></ul><ul><ul><li>Passer son temps dans la console, </li></ul></ul...
Pratiques de développement <ul><li>A faire : </li></ul><ul><ul><li>Tenir sa version de Maven à jour </li></ul></ul><ul><ul...
Programme <ul><li>Faire le choix Maven </li></ul><ul><li>Mettre en place Maven </li></ul><ul><li>Utiliser Maven au jour le...
Où trouver des documentations ?
Documentations <ul><li>Le site web :  </li></ul><ul><ul><li>http://maven.apache.org </li></ul></ul><ul><li>Le wiki projet ...
Quels ouvrages sont disponibles ?
Ouvrages <ul><li>Sonatype / O’Reilly : </li></ul><ul><ul><li>The Definitive Guide </li></ul></ul><ul><ul><li>http://www.so...
Ouvrages <ul><li>Exist Global </li></ul><ul><ul><li>Better builds with Maven </li></ul></ul><ul><ul><li>http://www.maestro...
Ouvrages <ul><li>Nicolas De Loof – Arnaud Héritier / Pearson </li></ul><ul><ul><li>Un ouvrage original axé sur la pratique...
Ouvrages <ul><li>OCTO Technology </li></ul><ul><ul><li>Java Productivity Primer </li></ul></ul><ul><ul><li>12 pratiques au...
Où trouver du support ?
Support <ul><li>Listes de diffusion </li></ul><ul><ul><li>http://maven.apache.org/mail-lists.html </li></ul></ul><ul><li>I...
Programme <ul><li>Faire le choix Maven </li></ul><ul><li>Mettre en place Maven </li></ul><ul><li>Utiliser Maven au jour le...
Le produit
Apache Maven 2.0.x <ul><li>Maintenance corrective </li></ul><ul><li>Dernière version publiée : 2.0.10 </li></ul><ul><li>Pa...
Apache Maven 2.x <ul><li>Maintenance évolutive </li></ul><ul><li>Corrections qui imposent un refactoring conséquent </li><...
Apache Maven 3.x <ul><li>N’AYEZ PAS PEUR, NE FUYEZ PAS !!! </li></ul><ul><li>Notre objectif :  Compatibilité avec Maven 2....
Apache Maven 3.x <ul><li>Pourquoi une 3.x ? </li></ul><ul><ul><li>Parce que refonte importante du code </li></ul></ul><ul>...
Apache Maven 3.x <ul><li>Refonte de la gestion des artifacts (Mercury) </li></ul><ul><ul><li>Amélioration de l’algorithme ...
Apache Maven 3.x <ul><li>Abstraction du descripteur de projet </li></ul><ul><ul><li>Gestion de plusieurs versions du POM <...
La concurrence
Les concurrents <ul><li>Ant + Ivy, Easy Ant, Gant, Graddle, … </li></ul><ul><li>Offrent la souplesse d’un outillage script...
La communauté
La communauté des utilisateurs <ul><li>1780 inscrits sur la liste de diffusion des utilisateurs </li></ul><ul><li>Statisti...
Le site web
Les téléchargements <ul><li>Nombre de téléchargements par mois depuis un an </li></ul>
L’équipe projet <ul><li>Plus de 60 committeurs enregistrés, </li></ul><ul><li>Plus de 20 actifs depuis le début de l’année...
Conclusion <ul><li>Aujourd’hui très largement adopté par les entreprises, </li></ul><ul><li>Un produit avec une grande val...
Questions ?
Licence <ul><li>Les photos et logos appartiennent à leurs auteurs respectifs </li></ul><ul><li>Le contenu de la présentati...
Buffet <ul><li>Merci pour votre attention </li></ul><ul><li>Merci à  Sopra Group  pour son sponsoring </li></ul>
Prochain SlideShare
Chargement dans…5
×

20090615 - Ch'ti JUG - Apache Maven

3 473 vues

Publié le

Présentation de Maven et de son utilisation en entreprise dans le cadre du Ch'ti JUG, le 15 juin 2009.
Pourquoi Maven ? Pourquoi l'adopter ? Les bonnes et mauvaise pratiques. Son avenir ...

Publié dans : Technologie
1 commentaire
2 j’aime
Statistiques
Remarques
Aucun téléchargement
Vues
Nombre de vues
3 473
Sur SlideShare
0
Issues des intégrations
0
Intégrations
362
Actions
Partages
0
Téléchargements
231
Commentaires
1
J’aime
2
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

20090615 - Ch'ti JUG - Apache Maven

  1. 1. Apache Maven 2 en entreprise… Comment tuer son projet avec Maven ? Comment le réussir ? 15 Juin 2009
  2. 2. Arnaud Héritier <ul><li>Committer depuis 2004 </li></ul><ul><li>Membre du PMC (Project Management Committee) depuis 2005 </li></ul><ul><li>aheritier AT apache DOT org </li></ul><ul><li>http://maven.apache.org </li></ul>
  3. 3. Arnaud Héritier <ul><li>Aujourd’hui - OCTO Technology </li></ul><ul><ul><li>Cabinet d’architectes en SI </li></ul></ul><ul><ul><li>http://www.octo.com </li></ul></ul><ul><ul><li>Architecte sénior </li></ul></ul><ul><li>Dans quelques jours - eXo platform </li></ul><ul><ul><li>Editeur de logiciels </li></ul></ul><ul><ul><li>http://www.exoplatform.com </li></ul></ul><ul><ul><li>Software Factory Manager </li></ul></ul><ul><ul><ul><li>Qualité </li></ul></ul></ul><ul><ul><ul><li>Outillage </li></ul></ul></ul><ul><ul><ul><li>Productivité des développements </li></ul></ul></ul>
  4. 4. Programme <ul><li>Faire le choix Maven </li></ul><ul><li>Mettre en place Maven </li></ul><ul><li>Utiliser Maven au jour le jour </li></ul><ul><li>Apprendre Maven </li></ul><ul><li>L’avenir de Maven </li></ul>
  5. 5. Programme <ul><li>Faire le choix Maven </li></ul><ul><ul><li>Pourquoi Maven ? </li></ul></ul><ul><ul><li>Les intérêts pour un projet </li></ul></ul><ul><ul><li>Les intérêts pour une entreprise </li></ul></ul><ul><ul><li>LA solution ? </li></ul></ul><ul><li>Mettre en place Maven </li></ul><ul><li>Utiliser Maven au jour le jour </li></ul><ul><li>Apprendre Maven </li></ul><ul><li>L’avenir de Maven </li></ul>
  6. 6. Pourquoi Maven ?
  7. 7. Construction d’un war en 2002 <ul><li>Utilisation d’Eclipse limitée </li></ul><ul><ul><li>Pas de WTP (uniquement dans la version payante d’IBM), </li></ul></ul><ul><ul><li>Eclipse ne permettait pas d’exporter des Wars </li></ul></ul>
  8. 8. Construction d’un war en 2002 <ul><li>Beaucoup de tâches manuelles </li></ul><ul><ul><li>Modifier les fichiers de paramétrage </li></ul></ul><ul><ul><li>Exporter les différents jar </li></ul></ul><ul><ul><li>Copier les dépendances (et nos jars), dans un répertoire lib </li></ul></ul><ul><ul><li>Faire un zip que l’on renomme en war </li></ul></ul><ul><ul><li>Tagguer l’ensemble des sources dans le répertoire de sources (CVS) </li></ul></ul><ul><ul><li>Envoyer le fichier par FTP sur le serveur d’intégration </li></ul></ul><ul><ul><li>Se connecter à la console d’administration du serveur et déployer l’application </li></ul></ul>
  9. 9. Construction d’un war en 2002 <ul><li>Un seul problème, Y’a toujours des problèmes </li></ul><ul><ul><li>Erreur dans la configuration </li></ul></ul><ul><ul><li>Oubli d’une dépendance </li></ul></ul><ul><ul><li>oubli d’un fichier </li></ul></ul><ul><ul><li>Correction de dernière minute qui introduit une régression… </li></ul></ul><ul><ul><li>Autres </li></ul></ul><ul><li>Combien de temps ça prend ? </li></ul><ul><ul><li>Quand tout va bien : 15 minutes </li></ul></ul><ul><ul><li>Quand il y a des problèmes : ½ journée </li></ul></ul>
  10. 10. Une première réponse : ANT <ul><li>Ecriture d’un script </li></ul><ul><ul><li>Permet d’automatiser le process </li></ul></ul><ul><ul><li>Durée du processus réduite de moitié </li></ul></ul><ul><ul><li>Le processus ne monopolise personne </li></ul></ul><ul><ul><ul><li>On le lance et on passe à autre chose </li></ul></ul></ul>
  11. 11. Les limites de ANT <ul><li>Ecrire le script, c’est long </li></ul><ul><li>Modifier un script, c’est très long </li></ul><ul><li>Au final, le gains de temps n’est pas évident </li></ul><ul><ul><li>Mais c’est quand même plus amusant </li></ul></ul><ul><ul><li>Il est possible de réutiliser le script ! </li></ul></ul>
  12. 12. La réutilisation de scripts ANT <ul><li>Les scripts ne sont pas directement réutilisables </li></ul><ul><ul><li>Structure de projets différents </li></ul></ul><ul><ul><li>Besoins différents </li></ul></ul><ul><li>Encore du temps perdu </li></ul><ul><ul><li>Modification du script </li></ul></ul><ul><ul><li>Réécriture pour le rendre plus générique </li></ul></ul><ul><li>Un nouveau métier s’est créé dans chaque projet : scripteur ANT </li></ul>
  13. 13. Quelques exemples <ul><li>J u nit : http://junit.cvs.sourceforge.net/viewvc/junit/junit/build.xml?view=markup </li></ul><ul><li>Findbugs : http://findbugs.googlecode.com/svn/trunk/findbugs/build.xml </li></ul><ul><li>J b oss SEAM : http://anonsvn.jboss.org/repos/seam/branches/community/Seam_2_0 </li></ul>
  14. 14. Les intérêts de Maven pour un projet
  15. 15. Maven, le choix Projet <ul><li>Le projet peut-être librement découpé en modules </li></ul><ul><ul><li>Maven ne cristallise pas l’architecture de l’application </li></ul></ul><ul><li>Gestion des dépendances </li></ul><ul><ul><li>Déclaratif : Gestion automatique du téléchargement et de l’utilisation dans le projet. </li></ul></ul><ul><ul><li>Transitivité : On ne déclare que ce que l’on utilise </li></ul></ul>
  16. 16. Maven, le choix Projet <ul><li>Centralise et automatise les différents aspects du développement de logiciels </li></ul><ul><li>Une seule chose qu’il ne peut faire à votre place  : Développer </li></ul><ul><ul><li>Construction </li></ul></ul><ul><ul><li>Tests </li></ul></ul><ul><ul><li>Packaging </li></ul></ul><ul><ul><li>Déploiement </li></ul></ul><ul><ul><li>Documentation </li></ul></ul><ul><ul><li>Contrôles et rapports sur la qualité des développements </li></ul></ul>
  17. 17. Les intérêts de Maven pour une entreprise
  18. 18. Maven, le choix Entreprise <ul><li>Standard du marché </li></ul><ul><ul><li>Disponibilité des ressources </li></ul></ul><ul><li>Standardisation des développements </li></ul><ul><ul><li>Organisation des sources </li></ul></ul><ul><ul><li>Descripteur de projet </li></ul></ul>
  19. 19. Maven, le choix Entreprise <ul><li>Rationnaliser les coûts </li></ul><ul><ul><li>On ne réinvente pas la roue à chaque nouveau projet </li></ul></ul><ul><ul><li>Factorisation entre projets </li></ul></ul><ul><li>Promotion de la qualité et intégration de l’outillage associé </li></ul>
  20. 20. LA solution ?
  21. 21. Maven, LA solution ? <ul><li>NON !!! </li></ul><ul><ul><li>Maven ne répond pas à tous les besoins </li></ul></ul><ul><li>Choisissez Maven seulement si vous adhérez à son objectif : </li></ul><ul><ul><li>STANDARDISER </li></ul></ul><ul><li>En avez vous les moyens ? </li></ul><ul><ul><li>Ex: standardiser un existant coûte vite cher ! </li></ul></ul><ul><li>Ant et les autres solutions de scripting peuvent être justifiées. </li></ul>
  22. 22. Programme <ul><li>Faire le choix Maven </li></ul><ul><li>Mettre en place Maven </li></ul><ul><ul><li>KISS </li></ul></ul><ul><ul><li>Sécurisation de l’environnement </li></ul></ul><ul><ul><li>Industrialisation des développements </li></ul></ul><ul><li>Utiliser Maven au jour le jour </li></ul><ul><li>Apprendre Maven </li></ul><ul><li>L’avenir de Maven </li></ul>
  23. 23. KISS
  24. 24. K.I.S.S. <ul><li>Keep It Simple, Stupid </li></ul><ul><li>Partez de rien </li></ul><ul><li>Ne faites pas de sur-architecture </li></ul><ul><ul><li>ça n’est pas parce que Maven vous propose d’utiliser des modules qu’il faut le faire. </li></ul></ul><ul><li>Ne testez pas toutes les fonctionnalités de Maven dans votre projet. </li></ul>
  25. 25. Sécurisation de l’environnement
  26. 26. Sécurisez ! <ul><li>Mettez en place un gestionnaire de proxy des repositories externes </li></ul><ul><li>Pour se prémunir </li></ul><ul><ul><li>des défaillances du réseau de l’entreprise </li></ul></ul><ul><ul><li>des défaillances des repositories externes. </li></ul></ul><ul><li>Pour faire plaisir </li></ul><ul><ul><li>à votre infra en diminuant la charge réseau. </li></ul></ul><ul><ul><li>aux développeurs en diminuant les temps de téléchargement. </li></ul></ul>
  27. 27. Sécurisez ! <ul><li>Différents produits gratuits ou payants </li></ul><ul><ul><li>Sonatype Nexus (remplaçant de Proximity) </li></ul></ul><ul><ul><li>Jfrog Artifactory </li></ul></ul><ul><ul><li>Apache Archiva </li></ul></ul><ul><li>Un groupe unique qui fait proxy vers tous les repos externes </li></ul><ul><ul><li>Déclaration d’un mirroir * dans les settings de tous les développeurs </li></ul></ul>
  28. 28. Settings avec un miroir global <ul><li><settings> <mirrors> <mirror> <!--This sends everything else to /public --> <id>nexus</id> <mirrorOf>external:*</mirrorOf> <url>http://localhost:8081/nexus/content/groups/public</url> </mirror> </mirrors> <profiles> <profile> <id>nexus</id> <!--Enable snapshots for the built in central repo to direct --> <!--all requests to nexus via the mirror --> <repositories> <repository> <id>central</id> <url>http://central</url> <releases><enabled>true</enabled></releases> <snapshots><enabled>true</enabled></snapshots> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>central</id> <url>http://central</url> <releases><enabled>true</enabled></releases> <snapshots><enabled>true</enabled></snapshots> </pluginRepository> </pluginRepositories> </profile> </profiles> <activeProfiles> <!--make the profile active all the time --> <activeProfile>nexus</activeProfile> </activeProfiles> </settings> </li></ul>
  29. 29. Industrialisation des développements
  30. 30. Industrialisez ! <ul><li>Partagez vos livrables : </li></ul><ul><ul><li>Référentiels d’artifacts </li></ul></ul><ul><li>Partagez vos extensions Maven : </li></ul><ul><ul><li>Plugins </li></ul></ul><ul><li>Partagez le paramétrage Maven : </li></ul><ul><ul><li>POM Parent </li></ul></ul>
  31. 31. Industrialisez ! <ul><li>Partagez vos versions recommandées d’artifacts : </li></ul><ul><ul><li>POM de dependencyManagement </li></ul></ul><ul><ul><li>Scope import </li></ul></ul><ul><li>Partagez vos modèles d’applications : </li></ul><ul><ul><li>Archetypes </li></ul></ul><ul><li>Automatisez votre processus de release </li></ul>
  32. 32. Industrialisez ! <ul><li>Mettez en place une démarche de tests </li></ul><ul><ul><li>Tout l’outillage est pré-intégré : </li></ul></ul><ul><ul><ul><li>Junit, TestNG – tests unitaires, </li></ul></ul></ul><ul><ul><ul><li>Selenium, Canoo – tests d’IHM, </li></ul></ul></ul><ul><ul><ul><li>Fitnesse, Greenpepper – tests fonctionnels, </li></ul></ul></ul><ul><ul><ul><li>SoapUI – tests d’intégration WS </li></ul></ul></ul><ul><ul><ul><li>Et bien d’autres encore </li></ul></ul></ul>
  33. 33. Industrialisez ! <ul><li>Mettez en place une démarche qualité </li></ul><ul><ul><li>Uniformisation du code (CheckStyle) </li></ul></ul><ul><ul><li>Recherche de mauvaises pratiques ou de bugs potentiels (PMD, FindBugs, Clirr) </li></ul></ul><ul><ul><li>Couverture du code par les tests (Cobertura, Clover) </li></ul></ul><ul><ul><li>Contrôles </li></ul></ul><ul><ul><ul><li>le build ne passe pas si certains critères ne sont pas atteints (Non compatibilité ascendante des APIs, …) </li></ul></ul></ul><ul><ul><li>Reporting </li></ul></ul><ul><ul><ul><li>Site web ou serveur dédié (sonar) </li></ul></ul></ul>
  34. 34. Sonar
  35. 35. Industrialisez ! <ul><li>Mettez en place un serveur d’intégration continue </li></ul><ul><ul><li>Environnement neutre </li></ul></ul><ul><ul><li>Réagir au plus tôt </li></ul></ul><ul><ul><ul><li>intégration, </li></ul></ul></ul><ul><ul><ul><li>tests, </li></ul></ul></ul><ul><ul><ul><li>contrôles qualité </li></ul></ul></ul><ul><ul><li>Amélioration de la productivité et de la qualité </li></ul></ul><ul><li>Différents produits gratuits ou non </li></ul><ul><ul><li>Hudson, Bamboo, TeamCity, Continuum, Cruisecontrol, … </li></ul></ul>
  36. 36. Hudson
  37. 37. Programme <ul><li>Faire le choix Maven </li></ul><ul><li>Mettre en place Maven </li></ul><ul><li>Utiliser Maven au jour le jour </li></ul><ul><ul><li>Structurer son projet </li></ul></ul><ul><ul><li>Structurer son POM </li></ul></ul><ul><ul><li>Pratiques de développement </li></ul></ul><ul><li>Apprendre Maven </li></ul><ul><li>L’avenir de Maven </li></ul>
  38. 38. Structurer son projet
  39. 39. Structurer son projet <ul><li>A ne pas faire : </li></ul><ul><ul><li>Ne pas utiliser les conventions </li></ul></ul><ul><ul><ul><li>Sauf si migration, et uniquement en période transitoire. </li></ul></ul></ul><ul><ul><li>Avoir plusieurs sous modules avec des versions différentes </li></ul></ul><ul><ul><ul><li>Ces modules sont alors de véritables projets indépendants. Pas besoin d’un build global. </li></ul></ul></ul>
  40. 40. Structurer son projet <ul><li>A ne pas faire : </li></ul><ul><ul><li>Avoir un trop grand nombre de modules dans un même projet </li></ul></ul><ul><ul><ul><li>Est ce justifié par des contraintes ou besoins techniques ? </li></ul></ul></ul><ul><ul><ul><li>Cela pénalise les performances le projet. </li></ul></ul></ul><ul><ul><li>Avoir un trop grand nombre d’héritage </li></ul></ul><ul><ul><ul><li>Cela complexifie la maintenance des POMs </li></ul></ul></ul><ul><ul><ul><ul><li>A quel endroit est positionné la configuration du plugin XXX ? </li></ul></ul></ul></ul>
  41. 41. Structurer son projet <ul><li>A faire : </li></ul><ul><ul><li>Utiliser l’héritage « naturel » : Le reactor sert de parent ses sous-modules. </li></ul></ul><ul><ul><ul><li>Simplifie la configuration (site, scm, …) </li></ul></ul></ul>
  42. 42. Structurer son POM
  43. 43. Structurer son POM <ul><li>A ne pas faire : </li></ul><ul><ul><li>Dépendances : </li></ul></ul><ul><ul><ul><li>Confondre dependencies / dependencyManagement </li></ul></ul></ul><ul><ul><li>Plugins : </li></ul></ul><ul><ul><ul><li>Confondre plugins / pluginManagement </li></ul></ul></ul><ul><ul><ul><li>Utiliser massivement le plugin AntRun </li></ul></ul></ul><ul><ul><ul><li>Ne pas définir explicitement les versions de TOUS les plugins utilisés par le projet </li></ul></ul></ul>
  44. 44. Structurer son POM <ul><li>A ne pas faire : </li></ul><ul><ul><li>Profils : </li></ul></ul><ul><ul><ul><li>Se rendre dépendant de l’environnement </li></ul></ul></ul><ul><ul><ul><li>Avoir des dépendances non définies par défaut </li></ul></ul></ul><ul><ul><li>Reporting et qualité </li></ul></ul><ul><ul><ul><li>Activer sur un code existant tous les rapportspossibles avec leurs configurations par défaut </li></ul></ul></ul><ul><ul><ul><li>Faire des contrôles sur le formattage du code sans fournir la configuration associée pour l’IDE </li></ul></ul></ul><ul><ul><li>Mettre tout ce qu’il est possible de mettre dans le POM. </li></ul></ul>
  45. 45. Structurer son POM <ul><li>A faire : </li></ul><ul><ul><li>Fixer les versions des dépendances dans le dependencyManagement de plus haut niveau dans l’héritage du projet </li></ul></ul><ul><ul><li>Définir les dépendances (groupId, artifactId, scope) au plus prêt de leur utilisation (dans les modules) </li></ul></ul><ul><ul><li>Utiliser les plugins dependency (apache) et versions (mojo) pour analyser et maintenir les dépendances de votre projet </li></ul></ul>
  46. 46. Pratiques de développement
  47. 47. Pratiques de développement <ul><li>A ne pas faire : </li></ul><ul><ul><li>Passer son temps dans la console, </li></ul></ul><ul><ul><li>S’échanger des jars par mail, </li></ul></ul><ul><ul><li>Utiliser systématiquement &quot;-Dmaven.test.skip=true » </li></ul></ul><ul><ul><li>Faire les releases à la main </li></ul></ul>
  48. 48. Pratiques de développement <ul><li>A faire : </li></ul><ul><ul><li>Tenir sa version de Maven à jour </li></ul></ul><ul><ul><ul><li>On a pu noter sur la version 2.1 une réduction de plus 75% du temps de résolution des modules et dépendances d’un projet </li></ul></ul></ul><ul><ul><li>Utiliser le plugin reactor (ou Maven >= 2.1) pour ne reconstruire que ce qui est nécessaire </li></ul></ul><ul><ul><li>Adapter son utilisation de Maven à son IDE. </li></ul></ul>
  49. 49. Programme <ul><li>Faire le choix Maven </li></ul><ul><li>Mettre en place Maven </li></ul><ul><li>Utiliser Maven au jour le jour </li></ul><ul><li>Apprendre Maven </li></ul><ul><ul><li>Où trouver des documentations ? </li></ul></ul><ul><ul><li>Quels ouvrages sont disponibles ? </li></ul></ul><ul><ul><li>Où trouver du support ? </li></ul></ul><ul><li>L’avenir de Maven </li></ul>
  50. 50. Où trouver des documentations ?
  51. 51. Documentations <ul><li>Le site web : </li></ul><ul><ul><li>http://maven.apache.org </li></ul></ul><ul><li>Le wiki projet : </li></ul><ul><ul><li>http://docs.codehaus.org/display/MAVEN </li></ul></ul><ul><li>Le wiki utilisateurs : </li></ul><ul><ul><li>http://docs.codehaus.org/display/MAVENUSER </li></ul></ul>
  52. 52. Quels ouvrages sont disponibles ?
  53. 53. Ouvrages <ul><li>Sonatype / O’Reilly : </li></ul><ul><ul><li>The Definitive Guide </li></ul></ul><ul><ul><li>http://www.sonatype.com/books </li></ul></ul><ul><ul><li>Gratuit en version électronique </li></ul></ul><ul><ul><li>D’ici la fin de l’année (?) en français </li></ul></ul>
  54. 54. Ouvrages <ul><li>Exist Global </li></ul><ul><ul><li>Better builds with Maven </li></ul></ul><ul><ul><li>http://www.maestrodev.com/better-build-maven </li></ul></ul><ul><ul><li>Gratuit </li></ul></ul><ul><ul><li>Version électronique uniquement </li></ul></ul>
  55. 55. Ouvrages <ul><li>Nicolas De Loof – Arnaud Héritier / Pearson </li></ul><ul><ul><li>Un ouvrage original axé sur la pratique </li></ul></ul><ul><ul><li>En français </li></ul></ul><ul><ul><li>D’ici la fin de l’année </li></ul></ul>
  56. 56. Ouvrages <ul><li>OCTO Technology </li></ul><ul><ul><li>Java Productivity Primer </li></ul></ul><ul><ul><li>12 pratiques autour de Maven et des usines de développement pour améliorer le productivité en Java </li></ul></ul><ul><ul><li>http://www.octo.com </li></ul></ul><ul><ul><li>Gratuit </li></ul></ul><ul><ul><li>En français cet été (enfin !!) </li></ul></ul>
  57. 57. Où trouver du support ?
  58. 58. Support <ul><li>Listes de diffusion </li></ul><ul><ul><li>http://maven.apache.org/mail-lists.html </li></ul></ul><ul><li>IRC </li></ul><ul><ul><li>irc.codehaus.org - #maven </li></ul></ul><ul><li>Developpez.net </li></ul><ul><ul><li>http://www.developpez.net/ forum maven </li></ul></ul><ul><ul><li>En français </li></ul></ul><ul><li>Contrats de support </li></ul><ul><ul><li>Sonatype et quelques autres entreprises </li></ul></ul>
  59. 59. Programme <ul><li>Faire le choix Maven </li></ul><ul><li>Mettre en place Maven </li></ul><ul><li>Utiliser Maven au jour le jour </li></ul><ul><li>Apprendre Maven </li></ul><ul><li>L’avenir de Maven </li></ul><ul><ul><li>Le produit </li></ul></ul><ul><ul><li>La concurrence </li></ul></ul><ul><ul><li>La communauté </li></ul></ul>
  60. 60. Le produit
  61. 61. Apache Maven 2.0.x <ul><li>Maintenance corrective </li></ul><ul><li>Dernière version publiée : 2.0.10 </li></ul><ul><li>Pas certain qu’une version 2.0.11 voit le jour. </li></ul>
  62. 62. Apache Maven 2.x <ul><li>Maintenance évolutive </li></ul><ul><li>Corrections qui imposent un refactoring conséquent </li></ul><ul><li>Dernière version publiée : 2.1.0 </li></ul><ul><li>La version 2.2.0 sera bientôt disponible </li></ul><ul><li>2.2.0-RC3 déjà disponible </li></ul><ul><ul><li>Correction du problème de résolution des propriétés et de transformation du POM apparus en 2.1.0 </li></ul></ul><ul><ul><li>Java 5 en pré-requis pour exécuter Maven </li></ul></ul>
  63. 63. Apache Maven 3.x <ul><li>N’AYEZ PAS PEUR, NE FUYEZ PAS !!! </li></ul><ul><li>Notre objectif : Compatibilité avec Maven 2.x assurée </li></ul><ul><ul><li>Pour les projets </li></ul></ul><ul><ul><li>Pour les plugins </li></ul></ul>
  64. 64. Apache Maven 3.x <ul><li>Pourquoi une 3.x ? </li></ul><ul><ul><li>Parce que refonte importante du code </li></ul></ul><ul><li>Réduction / Désendettement du code </li></ul><ul><li>Refonte de l’API d’utilisation (embedder) pour une meilleure intégration aux IDEs </li></ul>
  65. 65. Apache Maven 3.x <ul><li>Refonte de la gestion des artifacts (Mercury) </li></ul><ul><ul><li>Amélioration de l’algorithme de résolution des dépendances (SAT), </li></ul></ul><ul><ul><li>Abstraction des référentiels, </li></ul></ul><ul><ul><li>Gestion des versions configurable (Maven vs OSGI vs …), </li></ul></ul><ul><ul><li>Réécriture de la couche de transport http/webdav par l’équipe de Jetty. </li></ul></ul><ul><li>Cycle de vie prédictible et interrogeable, </li></ul>
  66. 66. Apache Maven 3.x <ul><li>Abstraction du descripteur de projet </li></ul><ul><ul><li>Gestion de plusieurs versions du POM </li></ul></ul><ul><ul><li>Gestion de plusieurs formats du POM </li></ul></ul><ul><ul><li>Comment gérer la compatibilité avec les anciennes versions de Maven ? </li></ul></ul><ul><li>Remplacement de plexus par une implémentation « standard « (JSR 299 ou JSR 330) : </li></ul><ul><ul><li>Guice ? </li></ul></ul><ul><ul><li>XBR ? </li></ul></ul><ul><li>... </li></ul>
  67. 67. La concurrence
  68. 68. Les concurrents <ul><li>Ant + Ivy, Easy Ant, Gant, Graddle, … </li></ul><ul><li>Offrent la souplesse d’un outillage scriptable </li></ul><ul><li>Cherchent à apporter un niveau de service proche de Maven (gestion de dépendances, ..) mais avec une standardisation moins contraignante. </li></ul><ul><li>Cette souplesse ne leur sera t’elle pas fatale comme pour Maven 1 ? </li></ul>
  69. 69. La communauté
  70. 70. La communauté des utilisateurs <ul><li>1780 inscrits sur la liste de diffusion des utilisateurs </li></ul><ul><li>Statistiques sur 90 jours </li></ul><ul><li>En bleu le nombre d’inscrits </li></ul><ul><li>En rouge le nombre de messages par jours </li></ul>
  71. 71. Le site web
  72. 72. Les téléchargements <ul><li>Nombre de téléchargements par mois depuis un an </li></ul>
  73. 73. L’équipe projet <ul><li>Plus de 60 committeurs enregistrés, </li></ul><ul><li>Plus de 20 actifs depuis le début de l’année, </li></ul><ul><li>Des entreprises comme Sonatype fournissent des ressources pour le projet et du support professionnel pour les utilisateurs, </li></ul><ul><li>Une communauté de développeurs moins isolée : rapprochements avec Eclipse, Jetty, … </li></ul>
  74. 74. Conclusion <ul><li>Aujourd’hui très largement adopté par les entreprises, </li></ul><ul><li>Un produit avec une grande valeur ajoutée, </li></ul><ul><li>Une communauté d’utilisateurs et de développeurs active, </li></ul><ul><li>Du support professionnel, </li></ul><ul><li>Une produit loin d’être « parfait », </li></ul><ul><li>Encore beaucoup de choses à faire, </li></ul><ul><li>Mais un véritable challenge à relever </li></ul><ul><ul><li>Venez nous aider à le réaliser !! </li></ul></ul>
  75. 75. Questions ?
  76. 76. Licence <ul><li>Les photos et logos appartiennent à leurs auteurs respectifs </li></ul><ul><li>Le contenu de la présentation est sous licence Creative Commons 2.0 France </li></ul><ul><ul><li>Contrat Paternité </li></ul></ul><ul><ul><li>Pas d'Utilisation Commerciale </li></ul></ul><ul><ul><li>Partage des Conditions Initiales à l'Identique </li></ul></ul><ul><li>http://creativecommons.org/licenses/by-nc-sa/2.0/fr/ </li></ul>
  77. 77. Buffet <ul><li>Merci pour votre attention </li></ul><ul><li>Merci à Sopra Group pour son sponsoring </li></ul>

×