Apache Maven<br />Initiation<br />Paris VI - Master STL-TA<br />Jeudi 23 Octobre 2008<br />
Arnaud Héritier<br />OCTO Technology<br />Expert sénior<br />aheritier AT octo DOT com<br />http://www.octo.com<br />Maven...
http://tinyurl.com/6r5v8p<br />http://tinyurl.com/5uv6lg<br />3<br />Bibliographie<br />
Licence<br />Creative Commons<br />Contrat Paternité<br />Pas d&apos;Utilisation Commerciale<br />Partage des Conditions I...
Aujourd’hui<br />Pourquoi Maven ?<br />Maven, les concepts<br />Maven, sa place dans l’entreprise<br />Comment faire échou...
Pourquoi Maven ?<br />Apache Maven<br />6<br />
Construction d’un war en 2002<br />Construire un war<br />Utilisation d’Eclipse limitée<br />En ces temps reculés où WTP n...
Construction d’un war en 2002<br />Combien de temps ça prend ?<br />Quand tout va bien : <br />15 minutes<br />Quand il y ...
Une première réponse : ANT<br />Ecriture d’un script<br />Permet d’automatiser le processus<br />Durée réduite du processu...
Les limites de ANT<br />Ecrire le script, c’est long<br />Modifier un script, c’est très long<br />Au final, le gains de t...
La réutilisation de scripts ANT<br />Les scripts ne sont pas directement réutilisables <br />Structure de projets différen...
Quelques exemples<br />http://anonsvn.jboss.org/repos/seam/branches/community/Seam_2_0<br />http://junit.cvs.sourceforge.n...
Les CONCEPTS<br />Apache Maven<br />13<br />
L’arrivée de Maven<br />Convention Over Configuration<br />On ne script plus, on décrit son projet (POM)<br />Architecture...
Les  conventions<br />1 projet Maven = 1 artéfact (pom, jar, war, ear, …)<br />1 organisation des répertoires prédéfinie<b...
Le POM<br />Un fichier XML (pom.xml)<br />Décrivant :<br />Identification du projet<br />Version du projet<br />Descriptio...
Cycle de vie et plugins<br />17<br />
Les référentiels de d’artéfacts<br />Par défaut :<br />Un central <br />http://repo1.maven.org/maven2<br />Propose plusieu...
Sans Maven<br />Avec Maven<br />19<br />Les dépendances<br />
Les dépendances<br />Déclaratives<br />groupId + artifactId + version (+ classifier)<br />Transitives<br />Lib A  Lib B<b...
Le reactor<br />Construit un projet et tous ces modules en résolvant l’ordre de leurs dépendances<br />Projet 1	<br />Modu...
L’héritage<br />Factorisation de paramètres entre projets/modules<br />L’organisation des sous modules et de l’héritage do...
L’héritage naturel<br />Lorsque le parent sert aussi de reactor<br />A condition que nom du module = son artifactId<br />E...
Site / Documentation<br />Génération d’un site documentaire à partir de documents dans différents formats :<br />Xdocs (xm...
Site / Documentation<br />25<br />
Reporting / Contrôle qualité<br />Reporting - Réactif<br />Je corrige les problèmes une fois étudié le rapport<br />Les pr...
Reporting / Contrôle qualité<br />27<br />
Et encore  . . .<br />Profiles<br />Properties<br />Assemblies<br />Archetypes<br />28<br />
Sa place dans l’entreprise<br />Apache Maven<br />29<br />
Référentiels de librairies<br />30<br />© OCTO  Technology 2008<br />
L’intégration continue<br />
L’intégration continue – Multi-projets<br />32<br />
Le processus de release<br />33<br />
Comment faire échouer son projet avec Maven ?<br />Apache Maven<br />34<br />
10 bonnes pratiques pour faire échouer son projet<br />Ne pas utiliser les conventions<br />Mettre tout ce qui est possibl...
10. Passer son temps dans la console<br />
Démonstration<br />Apache Maven<br />37<br />
Initialiser un projet<br />From scratch<br />A l’ancienne<br />Avec m2eclipse<br />Depuis un modèle (archetype)<br />En li...
Gérer les dépendances<br />Recherche de dépendances<br />Mvnrepository.com<br />m2eclipse<br />Dépendances simples<br />Dé...
Multi-modules<br />Ajout de modules<br />Dépendances entre modules<br />Le reactor<br />Son rôle<br />Le plugin du même no...
Héritage<br />Héritage entre modules<br />Mise en place d’un dependencyManagement<br />41<br />
Plugins<br />Configuration des plugins<br />PluginsManagement<br />42<br />
Documentation & Reporting<br />Différents formats pour la documentation :<br />Xdoc, APT<br />Configuration des rapports<b...
Questions ?<br />Merci pour votre attention<br />44<br />
Prochain SlideShare
Chargement dans…5
×

20081023 - Paris Vi Master STL TA - Initiation Maven

981 vues

Publié le

Présentation d'une demi journée de Maven en Master à Paris VI

Publié dans : Technologie, Formation
0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
981
Sur SlideShare
0
Issues des intégrations
0
Intégrations
4
Actions
Partages
0
Téléchargements
37
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

20081023 - Paris Vi Master STL TA - Initiation Maven

  1. 1. Apache Maven<br />Initiation<br />Paris VI - Master STL-TA<br />Jeudi 23 Octobre 2008<br />
  2. 2. Arnaud Héritier<br />OCTO Technology<br />Expert sénior<br />aheritier AT octo DOT com<br />http://www.octo.com<br />Maven<br />Committer depuis 2004<br />Membre du PMC (Project Management Committee) depuis 2005 <br />aheritier AT apache DOT org<br />http://maven.apache.org<br />DESS GLA (ex Master STL-TA)<br />Promotion 1999<br />2<br />
  3. 3. http://tinyurl.com/6r5v8p<br />http://tinyurl.com/5uv6lg<br />3<br />Bibliographie<br />
  4. 4. Licence<br />Creative Commons<br />Contrat Paternité<br />Pas d&apos;Utilisation Commerciale<br />Partage des Conditions Initiales à l&apos;Identique <br /> 2.0 France<br />http://creativecommons.org/licenses/by-nc-sa/2.0/fr/<br />4<br />
  5. 5. Aujourd’hui<br />Pourquoi Maven ?<br />Maven, les concepts<br />Maven, sa place dans l’entreprise<br />Comment faire échouer son projet avec Maven ?<br />Démonstration<br />5<br />
  6. 6. Pourquoi Maven ?<br />Apache Maven<br />6<br />
  7. 7. Construction d’un war en 2002<br />Construire un war<br />Utilisation d’Eclipse limitée<br />En ces temps reculés où WTP n’existait pas (uniquement dans la version payante d’IBM), eclipse ne permettait pas d’exporter des Wars<br />Gestion manuelle<br />Modifier les fichiers de paramétrage<br />Exporter les différents jar<br />Copier les dépendances (et nos jars), dans un répertoire lib<br />Faire un zip que l’on renomme en war<br />Tagguer l’ensemble des sources dans le répertoire de sources (CVS)<br />Envoi du fichier par FTP sur le serveur d’intégration<br />Se connecter à la console d’administration du serveur et déployer l’application <br />
  8. 8. Construction d’un war en 2002<br />Combien de temps ça prend ?<br />Quand tout va bien : <br />15 minutes<br />Quand il y a des problèmes : <br />½ journée<br />Un seul problème, Y’a toujours des problèmes<br />Erreur dans la configuration<br />Oublie d’une dépendance<br />Oublie d’un fichier<br />Correction de dernière minute qui introduit une régression…<br />Autres<br />
  9. 9. Une première réponse : ANT<br />Ecriture d’un script<br />Permet d’automatiser le processus<br />Durée réduite du processus réduite de moitié<br />Le processus ne monopolise personne<br />On le lance et on passe à autre chose<br />
  10. 10. Les limites de ANT<br />Ecrire le script, c’est long<br />Modifier un script, c’est très long<br />Au final, le gains de temps n’est pas évident<br />Mais c’est quand même plus amusant<br />Il est possible de réutiliser le script !<br />
  11. 11. La réutilisation de scripts ANT<br />Les scripts ne sont pas directement réutilisables <br />Structure de projets différents<br />Besoins différents<br />Encore du temps perdu<br />Modification du script<br />Réécriture pour le rendre plus générique<br /> Un nouveau métier s’est créé : scripteur ANT<br />
  12. 12. Quelques exemples<br />http://anonsvn.jboss.org/repos/seam/branches/community/Seam_2_0<br />http://junit.cvs.sourceforge.net/viewvc/junit/junit/build.xml?view=markup<br />http://findbugs.googlecode.com/svn/trunk/findbugs/build.xml<br />
  13. 13. Les CONCEPTS<br />Apache Maven<br />13<br />
  14. 14. L’arrivée de Maven<br />Convention Over Configuration<br />On ne script plus, on décrit son projet (POM)<br />Architecture extensible<br />Des plugins réutilisables évitent la multiplication des scripts de build<br />Gestion des librairies du projet (versions, partage, ..)<br />Référentiels de librairies<br />Dépendances déclaratives<br />Dépendances transitives<br />Amélioration de la qualité des livrables<br />Contrôles<br />Rapports<br />
  15. 15. Les conventions<br />1 projet Maven = 1 artéfact (pom, jar, war, ear, …)<br />1 organisation des répertoires prédéfinie<br />1 descripteur standardisé<br />Des cycles de construction standardisés<br />15<br />
  16. 16. Le POM<br />Un fichier XML (pom.xml)<br />Décrivant :<br />Identification du projet<br />Version du projet<br />Description du projet<br />Liste des développeurs<br />Dépendances<br />…<br />&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;<br />&lt;project&gt;<br /> &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;<br /> &lt;groupId&gt;com.octo&lt;/groupId&gt;<br /> &lt;artifactId&gt;webapp-sample&lt;/artifactId&gt;<br /> &lt;version&gt;1.1-SNAPSHOT&lt;/version&gt;<br /> &lt;packaging&gt;war&lt;/packaging&gt;<br /> &lt;name&gt;Simple webapp&lt;/name&gt;<br /> &lt;inceptionYear&gt;2007&lt;/inceptionYear&gt;<br /> &lt;dependencies&gt;<br /> &lt;dependency&gt;<br /> &lt;groupId&gt;org.springframework&lt;/groupId&gt;<br /> &lt;artifactId&gt;spring-struts&lt;/artifactId&gt;<br /> &lt;version&gt;2.0.2&lt;/version&gt;<br /> &lt;/dependency&gt;<br /> …<br /> &lt;/dependencies&gt;<br />&lt;/project&gt;<br />16<br />
  17. 17. Cycle de vie et plugins<br />17<br />
  18. 18. Les référentiels de d’artéfacts<br />Par défaut :<br />Un central <br />http://repo1.maven.org/maven2<br />Propose plusieurs dizaines de Go de librairies OSS.<br />Un local <br />${user.home}/.m2/repository<br />Centralise tous les artéfacts utilisés et créés par vos projets<br />18<br />
  19. 19. Sans Maven<br />Avec Maven<br />19<br />Les dépendances<br />
  20. 20. Les dépendances<br />Déclaratives<br />groupId + artifactId + version (+ classifier)<br />Transitives<br />Lib A  Lib B<br />Lib B  Lib C<br />Alors Lib A  Lib C<br />Scopes d’utilisation<br />Runtime : Taglibs<br />Provided : API Servlet, Driver SGBD, …<br />Compile : par défaut<br />Test : Junit, DBUnit…<br />System : non recommandé<br />20<br />
  21. 21. Le reactor<br />Construit un projet et tous ces modules en résolvant l’ordre de leurs dépendances<br />Projet 1 <br />Module A (dépend de B)<br />Module B<br />Module C (dépend de A)<br /> Construira B <br />puis A <br />puis C <br />pom.xml de projet 1<br />&lt;modules&gt;<br /> &lt;module&gt;moduleA&lt;/module&gt;<br /> &lt;module&gt;moduleC&lt;/module&gt;<br /> &lt;module&gt;moduleB&lt;/module&gt;<br />&lt;/modules&gt;<br />21<br />
  22. 22. L’héritage<br />Factorisation de paramètres entre projets/modules<br />L’organisation des sous modules et de l’héritage doit être technique (ejbs, wars, jars) et non pas fonctionnel (serviceA, serviceB, …)<br />Projet1<br />Jars<br />Jar1<br />Jar2<br />Wars<br />War1<br />…<br />pom.xml de module Jar1<br />&lt;parent&gt;<br /> &lt;groupId&gt;X.Y.Z&lt;/groupId&gt;<br /> &lt;artifactId&gt;jars&lt;/artifactId&gt;<br /> &lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;<br />&lt;/parent&gt;<br />22<br />
  23. 23. L’héritage naturel<br />Lorsque le parent sert aussi de reactor<br />A condition que nom du module = son artifactId<br />Evite la re-définition de certains éléments du pom :<br />Url du site<br />Déploiement du site <br />Informations SCMs<br />23<br />
  24. 24. Site / Documentation<br />Génération d’un site documentaire à partir de documents dans différents formats :<br />Xdocs (xml)<br />Apt (wiki)<br />Docbook<br />….<br />Génération de rapports sur le projet<br />Descriptif<br />Informations sur les dépendances<br />Documentation automatique des plugins maven<br />Javadoc<br />Xref<br />24<br />
  25. 25. Site / Documentation<br />25<br />
  26. 26. Reporting / Contrôle qualité<br />Reporting - Réactif<br />Je corrige les problèmes une fois étudié le rapport<br />Les problèmes sont dans le gestionnaire de versions<br />Contrôle - Pro-actif<br />Le build échoue si mon code ne respecte pas certaines règles <br />Les problèmes ne sont pas dans le gestionnaire de versions puisque je ne commit jamais un code qui ne build pas<br />Types de contrôles / reporting<br />Résultat de l’exécution des tests : surefire<br />Couverture de tests : clover, cobertura<br />Qualité du code : findbugs<br />Conformité aux standards : checkstyle<br />Patterns / Antipatterns : pmd<br />26<br />
  27. 27. Reporting / Contrôle qualité<br />27<br />
  28. 28. Et encore . . .<br />Profiles<br />Properties<br />Assemblies<br />Archetypes<br />28<br />
  29. 29. Sa place dans l’entreprise<br />Apache Maven<br />29<br />
  30. 30. Référentiels de librairies<br />30<br />© OCTO Technology 2008<br />
  31. 31. L’intégration continue<br />
  32. 32. L’intégration continue – Multi-projets<br />32<br />
  33. 33. Le processus de release<br />33<br />
  34. 34. Comment faire échouer son projet avec Maven ?<br />Apache Maven<br />34<br />
  35. 35. 10 bonnes pratiques pour faire échouer son projet<br />Ne pas utiliser les conventions<br />Mettre tout ce qui est possible de mettre dans le pom<br />Se rendre dépendant de l’environnement<br />Multiplier les niveauxd’héritage<br />Utiliser systématiquement &quot;-Dmaven.test.skip=true » <br />Faire les releases à la main<br />S’échanger les jars par mail<br />Utilisation massive du plugin antrun<br />Essayer de définir les dépendances pour les autres<br />35<br />
  36. 36. 10. Passer son temps dans la console<br />
  37. 37. Démonstration<br />Apache Maven<br />37<br />
  38. 38. Initialiser un projet<br />From scratch<br />A l’ancienne<br />Avec m2eclipse<br />Depuis un modèle (archetype)<br />En ligne de commande<br />Avec m2eclipse<br />38<br />
  39. 39. Gérer les dépendances<br />Recherche de dépendances<br />Mvnrepository.com<br />m2eclipse<br />Dépendances simples<br />Dépendances avancées<br />Ranges<br />Scopes<br />Excludes<br />Analyse des dépendances<br />dependency:tree<br />dependency:analyze<br />39<br />
  40. 40. Multi-modules<br />Ajout de modules<br />Dépendances entre modules<br />Le reactor<br />Son rôle<br />Le plugin du même nom<br />40<br />
  41. 41. Héritage<br />Héritage entre modules<br />Mise en place d’un dependencyManagement<br />41<br />
  42. 42. Plugins<br />Configuration des plugins<br />PluginsManagement<br />42<br />
  43. 43. Documentation & Reporting<br />Différents formats pour la documentation :<br />Xdoc, APT<br />Configuration des rapports<br />Descripteur de site<br />43<br />
  44. 44. Questions ?<br />Merci pour votre attention<br />44<br />

×