0
Apache Maven<br />Mise en œuvre en entreprise<br />Java User Group - Tours<br />Mercredi 08 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...
Benoit Lafontaine<br />OCTO Technology<br />Architecte sénior<br />Responsable du Centre de Compétences Java<br />blafonta...
Ce soir<br />Pourquoi Maven ?<br />Maven, les concepts<br />Maven dans l’entreprise<br />Comment faire échouer son projet ...
Pourquoi Maven ?<br />Apache Maven<br />5<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 process<br />Durée réduite du processus ...
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 />12<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...
Les dépendances<br />Déclaratives<br />groupId + artifactId + version (+ classifier)<br />Transitives<br />Lib A  Lib B<b...
Sans Maven<br />Avec Maven<br />17<br />Les dépendances<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...
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 />23<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 />25<br />
Cycle de vie et plugins<br />26<br />
Dans l’entreprise<br />Apache Maven<br />27<br />
BuildLocal<br />BuildLocal<br />BuildLocal<br />Build<br />Référentiel<br />binaires<br />Serveur<br />d’intégration<br />...
L’intégration continue<br />29<br />Automated Tasks<br />Deploy <br />Application onIntegration<br />environment<br />Manu...
Référentiels de librairies<br />30<br />© OCTO  Technology 2008<br />
Le processus de release<br />31<br />Verify that projectdoesn’t depend of“SNAPSHOT” dependencies<br />VerifyUnit Tests(and...
Comment faire échouer son projet avec Maven ?<br />Apache Maven<br />32<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 />
Licence<br />Creative Commons<br />Contrat Paternité<br />Pas d&apos;Utilisation Commerciale<br />Partage des Conditions I...
Questions ?<br />36<br />
Buffet<br />Merci pour votre attention<br />37<br />
Upcoming SlideShare
Loading in...5
×

20081008 - Tours Jug - Apache Maven

838

Published on

Session Tours JUG en duo avec Benoît Lafontaine (OCTO Technology)

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
838
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
18
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "20081008 - Tours Jug - Apache Maven"

  1. 1. Apache Maven<br />Mise en œuvre en entreprise<br />Java User Group - Tours<br />Mercredi 08 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 />Développeur (committer) depuis 2004<br />Membre du conseil de gestion du projet (Project Management Committee) depuis 2005 <br />aheritier AT apache DOT org<br />http://maven.apache.org<br />2<br />
  3. 3. Benoit Lafontaine<br />OCTO Technology<br />Architecte sénior<br />Responsable du Centre de Compétences Java<br />blafontaine AT octo DOT com<br />http://www.octo.com<br />Maven<br />Utilisateur de Maven 2 depuis 2006<br />3<br />
  4. 4. Ce soir<br />Pourquoi Maven ?<br />Maven, les concepts<br />Maven dans l’entreprise<br />Comment faire échouer son projet avec Maven ?<br />4<br />
  5. 5. Pourquoi Maven ?<br />Apache Maven<br />5<br />
  6. 6. 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 />
  7. 7. 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 />
  8. 8. Une première réponse : ANT<br />Ecriture d’un script<br />Permet d’automatiser le process<br />Durée réduite du processus réduite de moitiée<br />Le processus ne monopolise personne<br />On le lance et on passe à autre chose<br />
  9. 9. 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 />
  10. 10. 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 />
  11. 11. 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 />
  12. 12. Les CONCEPTS<br />Apache Maven<br />12<br />
  13. 13. 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 />
  14. 14. 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 />14<br />
  15. 15. 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 />15<br />
  16. 16. 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 />Import : Pour charger le dependencyManagement d’un autre pom.<br />16<br />
  17. 17. Sans Maven<br />Avec Maven<br />17<br />Les dépendances<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 toutes les artéfacts utilisés et créés par vos projets<br />18<br />
  19. 19. 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 />19<br />
  20. 20. 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 />20<br />
  21. 21. 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 />21<br />
  22. 22. 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 />22<br />
  23. 23. Site / Documentation<br />23<br />
  24. 24. 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 />24<br />
  25. 25. Reporting / Contrôle qualité<br />25<br />
  26. 26. Cycle de vie et plugins<br />26<br />
  27. 27. Dans l’entreprise<br />Apache Maven<br />27<br />
  28. 28. BuildLocal<br />BuildLocal<br />BuildLocal<br />Build<br />Référentiel<br />binaires<br />Serveur<br />d’intégration<br />continue<br />Doumentation<br />& Métriques<br />Build <br />Récupérer <br />les dépendances<br />Compiler<br />Vérifier les règles de codage<br />Exécuter les tests<br />Gestionnaire <br />de sources<br />Packager<br />Déployer<br />Plateforme<br />démonstration<br />Documenter<br />L’intégration continue<br />Notifications<br />
  29. 29. L’intégration continue<br />29<br />Automated Tasks<br />Deploy <br />Application onIntegration<br />environment<br />ManualTasks<br />Merge all changes<br />ManualTasks<br />Get last versionof project 1<br />Package<br />Make binaries<br />Available on acentralized place<br />Commit changeson SCM<br />Test<br />Develop<br />Develop<br />Project 2<br />Project 1<br />
  30. 30. Référentiels de librairies<br />30<br />© OCTO Technology 2008<br />
  31. 31. Le processus de release<br />31<br />Verify that projectdoesn’t depend of“SNAPSHOT” dependencies<br />VerifyUnit Tests(and coding rules)<br />Compile<br />Code<br />Change projectdescriptor to specifyreleased version<br />Verify there’sno more local changes<br />Commitchange<br />Tag sourcesin SCM<br />Checkout tagged<br />sources to be sureof the final binary<br />Verifyunit testsand coding rules<br />Compile<br />Code<br />Deploy binary<br />on centralized repository<br />Package<br />Binary<br />Change projectdescriptor to specifynew current version<br />Commitchange<br />Generateand DeployDocumentation<br />
  32. 32. Comment faire échouer son projet avec Maven ?<br />Apache Maven<br />32<br />
  33. 33. 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 />33<br />
  34. 34. 10. Passer son temps dans la console<br />
  35. 35. 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 />35<br />
  36. 36. Questions ?<br />36<br />
  37. 37. Buffet<br />Merci pour votre attention<br />37<br />
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×