SlideShare une entreprise Scribd logo
Apache Maven Mise en œuvre en entreprise Java User Group - Tours Mercredi 08 Octobre 2008
Arnaud Héritier OCTO Technology Expert sénior aheritier AT octo DOT com http://www.octo.com Maven Développeur (committer) depuis 2004 Membre du conseil de gestion du projet (Project Management Committee) depuis 2005   aheritier AT apache DOT org http://maven.apache.org 2
Benoit Lafontaine OCTO Technology Architecte sénior Responsable du Centre de Compétences Java blafontaine AT octo DOT com http://www.octo.com Maven Utilisateur de Maven 2 depuis 2006 3
Ce soir Pourquoi Maven ? Maven, les concepts Maven dans l’entreprise Comment faire échouer son projet avec Maven ? 4
Pourquoi Maven ? Apache Maven 5
Construction d’un war en 2002 Construire un war Utilisation d’Eclipse limitée 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 Gestion manuelle Modifier les fichiers de paramétrage Exporter les différents jar Copier les dépendances (et nos jars), dans un répertoire lib Faire un zip que l’on renomme en war Tagguer l’ensemble des sources dans le répertoire de sources (CVS) Envoi du fichier par FTP sur le serveur d’intégration Se connecter à la console d’administration du serveur et déployer l’application
Construction d’un war en 2002 Combien de temps ça prend ? Quand tout va bien :  15 minutes Quand il y a des problèmes :  ½ journée Un seul problème, Y’a toujours des problèmes Erreur dans la configuration Oublie d’une dépendance Oublie d’un fichier Correction de dernière minute qui introduit une régression… Autres
Une première réponse : ANT Ecriture d’un script Permet d’automatiser le process Durée réduite du processus réduite de moitiée Le processus ne monopolise personne On le lance et on passe à autre chose
Les limites de ANT Ecrire le script, c’est long Modifier un script, c’est très long Au final, le gains de temps n’est pas évident Mais c’est quand même plus amusant Il est possible de réutiliser le script !
La réutilisation de scripts ANT Les scripts ne sont pas directement réutilisables  Structure de projets différents Besoins différents Encore du temps perdu Modification du script Réécriture pour le rendre plus générique  Un nouveau métier s’est créé : scripteur ANT
Quelques exemples http://anonsvn.jboss.org/repos/seam/branches/community/Seam_2_0 http://junit.cvs.sourceforge.net/viewvc/junit/junit/build.xml?view=markup http://findbugs.googlecode.com/svn/trunk/findbugs/build.xml
Les CONCEPTS Apache Maven 12
L’arrivée de Maven Convention Over Configuration On ne script plus, on décrit son projet (POM) Architecture extensible Des plugins réutilisables évitent la multiplication des scripts de build Gestion des librairies du projet (versions, partage, ..) Référentiels de librairies Dépendances déclaratives Dépendances transitives Amélioration de la qualité des livrables Contrôles Rapports
Les  conventions 1 projet Maven = 1 artéfact (pom, jar, war, ear, …) 1 organisation des répertoires prédéfinie 1 descripteur standardisé 14
Le POM Un fichier XML (pom.xml) Décrivant : Identification du projet Version du projet Description du projet Liste des développeurs Dépendances … <?xml version="1.0" encoding="UTF-8"?> <project>  <modelVersion>4.0.0</modelVersion>  <groupId>com.octo</groupId>  <artifactId>webapp-sample</artifactId>  <version>1.1-SNAPSHOT</version>  <packaging>war</packaging>  <name>Simple webapp</name>  <inceptionYear>2007</inceptionYear>  <dependencies>   <dependency>    <groupId>org.springframework</groupId>    <artifactId>spring-struts</artifactId>    <version>2.0.2</version>   </dependency>   …  </dependencies> </project> 15
Les dépendances Déclaratives groupId + artifactId + version (+ classifier) Transitives Lib A  Lib B Lib B  Lib C Alors Lib A  Lib C Scopes d’utilisation Runtime : Taglibs Provided : API Servlet, Driver SGBD, … Compile : par défaut Test : Junit, DBUnit… System : non recommandé Import : Pour charger le dependencyManagement d’un autre pom. 16
Sans Maven Avec Maven 17 Les dépendances
Les référentiels de d’artéfacts Par défaut : Un central  http://repo1.maven.org/maven2 Propose plusieurs dizaines de Go de librairies OSS. Un local  ${user.home}/.m2/repository Centralise toutes les artéfacts utilisés et créés par vos projets 18
Le reactor Construit un projet et tous ces modules en résolvant l’ordre de leurs dépendances Projet 1	 Module A (dépend de B) Module B Module C (dépend de A)  Construira B  puis A  puis C  pom.xml de projet 1 <modules>   <module>moduleA</module>   <module>moduleC</module>   <module>moduleB</module> </modules> 19
L’héritage Factorisation de paramètres entre projets/modules L’organisation des sous modules et de l’héritage doit être technique (ejbs, wars, jars) et non pas fonctionnel (serviceA, serviceB, …) Projet1 Jars Jar1 Jar2 Wars War1 … pom.xml de module Jar1 <parent>   <groupId>X.Y.Z</groupId>   <artifactId>jars</artifactId>   <version>1.0-SNAPSHOT</version> </parent> 20
L’héritage naturel Lorsque le parent sert aussi de reactor A condition que nom du module = son artifactId Evite la re-définition de certains éléments du pom : Url du site Déploiement du site  Informations SCMs 21
Site / Documentation Génération d’un site documentaire à partir de documents dans différents formats : Xdocs (xml) Apt (wiki) Docbook …. Génération de rapports sur le projet Descriptif Informations sur les dépendances Documentation automatique des plugins maven Javadoc Xref 22
Site / Documentation 23
Reporting / Contrôle qualité Reporting - Réactif Je corrige les problèmes une fois étudié le rapport Les problèmes sont dans le gestionnaire de versions Contrôle - Pro-actif Le build échoue si mon code ne respecte pas certaines règles	 Les problèmes ne sont pas dans le gestionnaire de versions puisque je ne commit jamais un code qui ne build pas Types de contrôles / reporting Résultat de l’exécution des tests : surefire Couverture de tests : clover, cobertura Qualité du code : findbugs Conformité aux standards : checkstyle Patterns / Antipatterns : pmd 24
Reporting / Contrôle qualité 25
Cycle de vie et plugins 26
Dans l’entreprise Apache Maven 27
BuildLocal BuildLocal BuildLocal Build Référentiel binaires Serveur d’intégration continue Doumentation & Métriques Build  Récupérer  les dépendances Compiler Vérifier les règles de  codage Exécuter les tests Gestionnaire  de sources Packager Déployer Plateforme démonstration Documenter L’intégration continue Notifications
L’intégration continue 29 Automated Tasks Deploy  Application onIntegration environment ManualTasks Merge all changes ManualTasks Get last versionof project 1 Package Make binaries Available on acentralized place Commit changeson SCM Test Develop Develop Project 2 Project 1
Référentiels de librairies 30 © OCTO  Technology 2008
Le processus de release 31 Verify that projectdoesn’t depend of“SNAPSHOT” dependencies VerifyUnit Tests(and coding rules) Compile Code Change projectdescriptor to specifyreleased version Verify there’sno more local changes Commitchange Tag sourcesin SCM Checkout tagged sources to be sureof the final binary Verifyunit testsand coding rules Compile Code Deploy binary on centralized repository Package Binary Change projectdescriptor to specifynew current version Commitchange Generateand DeployDocumentation
Comment faire échouer son projet avec Maven ? Apache Maven 32
10 bonnes pratiques pour faire échouer son projet Ne pas utiliser les conventions Mettre tout ce qui est possible de mettre dans le pom Se rendre dépendant de l’environnement Multiplier les niveauxd’héritage Utiliser systématiquement "-Dmaven.test.skip=true »  Faire les releases à la main S’échanger les jars par mail Utilisation massive du plugin antrun Essayer de définir les dépendances pour les autres 33
10. Passer son temps dans la console
Licence Creative Commons Contrat Paternité Pas d'Utilisation Commerciale Partage des Conditions Initiales à l'Identique   2.0 France http://creativecommons.org/licenses/by-nc-sa/2.0/fr/ 35
Questions ? 36
Buffet Merci pour votre attention 37

Contenu connexe

Tendances

Présentation Maven
Présentation MavenPrésentation Maven
Présentation Maven
SOAT
 
Intégration continue transco
Intégration continue transcoIntégration continue transco
Intégration continue transco
laurent_opnworks
 
Introduction à TeamCity
Introduction à TeamCityIntroduction à TeamCity
Introduction à TeamCity
Ulrich VACHON
 
JENKINS_OWF11_OSDC_PARIS20110924
JENKINS_OWF11_OSDC_PARIS20110924JENKINS_OWF11_OSDC_PARIS20110924
JENKINS_OWF11_OSDC_PARIS20110924
Gregory Boissinot
 

Tendances (20)

Présentation Maven
Présentation MavenPrésentation Maven
Présentation Maven
 
Quand java prend de la vitesse, apache maven vous garde sur les rails
Quand java prend de la vitesse, apache maven vous garde sur les railsQuand java prend de la vitesse, apache maven vous garde sur les rails
Quand java prend de la vitesse, apache maven vous garde sur les rails
 
Presentation of GWT 2.4 (PDF version)
Presentation of GWT 2.4 (PDF version)Presentation of GWT 2.4 (PDF version)
Presentation of GWT 2.4 (PDF version)
 
Jenkins
JenkinsJenkins
Jenkins
 
Gestion des dépendances dans un projet PHP - RMLL 2012
Gestion des dépendances dans un projet PHP - RMLL 2012Gestion des dépendances dans un projet PHP - RMLL 2012
Gestion des dépendances dans un projet PHP - RMLL 2012
 
Subversion - Utilisation et bonnes pratiques
Subversion - Utilisation et bonnes pratiquesSubversion - Utilisation et bonnes pratiques
Subversion - Utilisation et bonnes pratiques
 
Presentation of GWT 2.4 (PowerPoint version)
Presentation of GWT 2.4 (PowerPoint version)Presentation of GWT 2.4 (PowerPoint version)
Presentation of GWT 2.4 (PowerPoint version)
 
Formation Gratuite Total Tests par les experts Java Ippon
Formation Gratuite Total Tests par les experts Java Ippon Formation Gratuite Total Tests par les experts Java Ippon
Formation Gratuite Total Tests par les experts Java Ippon
 
Gérer ses environnements de développement avec vagrant - PHP Tour Nantes 2012
Gérer ses environnements de développement avec vagrant - PHP Tour Nantes 2012Gérer ses environnements de développement avec vagrant - PHP Tour Nantes 2012
Gérer ses environnements de développement avec vagrant - PHP Tour Nantes 2012
 
Gérer ses environnements de développement avec Vagrant - RMLL 2012
Gérer ses environnements de développement avec Vagrant - RMLL 2012Gérer ses environnements de développement avec Vagrant - RMLL 2012
Gérer ses environnements de développement avec Vagrant - RMLL 2012
 
Intégration continue transco
Intégration continue transcoIntégration continue transco
Intégration continue transco
 
Introduction à TeamCity
Introduction à TeamCityIntroduction à TeamCity
Introduction à TeamCity
 
Jenkins Workflow
Jenkins WorkflowJenkins Workflow
Jenkins Workflow
 
JENKINS_OWF11_OSDC_PARIS20110924
JENKINS_OWF11_OSDC_PARIS20110924JENKINS_OWF11_OSDC_PARIS20110924
JENKINS_OWF11_OSDC_PARIS20110924
 
Présentation de Vagrant
Présentation de VagrantPrésentation de Vagrant
Présentation de Vagrant
 
Java 9 modulo les modules devoxx fr 2017
Java 9 modulo les modules devoxx fr 2017Java 9 modulo les modules devoxx fr 2017
Java 9 modulo les modules devoxx fr 2017
 
Symphonie pour PHP industrialisé en agilité majeure
Symphonie pour PHP industrialisé en agilité majeureSymphonie pour PHP industrialisé en agilité majeure
Symphonie pour PHP industrialisé en agilité majeure
 
JENKINS_BreizhJUG_20111003
JENKINS_BreizhJUG_20111003JENKINS_BreizhJUG_20111003
JENKINS_BreizhJUG_20111003
 
Concept de l’Intégration Continue
Concept de l’Intégration ContinueConcept de l’Intégration Continue
Concept de l’Intégration Continue
 
Maven
MavenMaven
Maven
 

En vedette

Une (simple) présentation de Apache Maven 2
Une (simple) présentation de Apache Maven 2Une (simple) présentation de Apache Maven 2
Une (simple) présentation de Apache Maven 2
teejug
 
Das cavernas à Internet: Conhecimento Livre e Sobrevivência Humana - Carlos A...
Das cavernas à Internet: Conhecimento Livre e Sobrevivência Humana - Carlos A...Das cavernas à Internet: Conhecimento Livre e Sobrevivência Humana - Carlos A...
Das cavernas à Internet: Conhecimento Livre e Sobrevivência Humana - Carlos A...
Tchelinux
 
Com funciona Dot sub?
Com funciona Dot sub?Com funciona Dot sub?
Com funciona Dot sub?
Daniel
 
Clube do herbert polar bear
Clube do herbert polar bearClube do herbert polar bear
Clube do herbert polar bear
Victor Gabriel
 
English dot worws level 1
English dot worws level 1English dot worws level 1
English dot worws level 1
mafesita2
 
TU Wien Gastvortrag 07.06.2010, Michaela Mayr
TU Wien Gastvortrag 07.06.2010, Michaela MayrTU Wien Gastvortrag 07.06.2010, Michaela Mayr
TU Wien Gastvortrag 07.06.2010, Michaela Mayr
Web@rchive Austria
 
Estado final aprendices del curso ENGLISH DOT WORKS A1 LEVEL 1 624803
Estado final aprendices del curso ENGLISH DOT WORKS A1 LEVEL 1 624803Estado final aprendices del curso ENGLISH DOT WORKS A1 LEVEL 1 624803
Estado final aprendices del curso ENGLISH DOT WORKS A1 LEVEL 1 624803
CARGAVIRIA
 

En vedette (20)

Une (simple) présentation de Apache Maven 2
Une (simple) présentation de Apache Maven 2Une (simple) présentation de Apache Maven 2
Une (simple) présentation de Apache Maven 2
 
24hr DOT
24hr DOT24hr DOT
24hr DOT
 
Graphiz - Using the DOT Language
Graphiz - Using the DOT LanguageGraphiz - Using the DOT Language
Graphiz - Using the DOT Language
 
Juegos y Mundos Virtuales
Juegos y Mundos VirtualesJuegos y Mundos Virtuales
Juegos y Mundos Virtuales
 
Das cavernas à Internet: Conhecimento Livre e Sobrevivência Humana - Carlos A...
Das cavernas à Internet: Conhecimento Livre e Sobrevivência Humana - Carlos A...Das cavernas à Internet: Conhecimento Livre e Sobrevivência Humana - Carlos A...
Das cavernas à Internet: Conhecimento Livre e Sobrevivência Humana - Carlos A...
 
Barrett m107
Barrett m107Barrett m107
Barrett m107
 
Modos De OperaçãO Snort Campusparty2010
Modos De OperaçãO Snort Campusparty2010Modos De OperaçãO Snort Campusparty2010
Modos De OperaçãO Snort Campusparty2010
 
Ericsson Radio Dot System: Cobertura em todos os níveis
Ericsson Radio Dot System: Cobertura em todos os níveisEricsson Radio Dot System: Cobertura em todos os níveis
Ericsson Radio Dot System: Cobertura em todos os níveis
 
Com funciona Dot sub?
Com funciona Dot sub?Com funciona Dot sub?
Com funciona Dot sub?
 
Clube do herbert polar bear
Clube do herbert polar bearClube do herbert polar bear
Clube do herbert polar bear
 
Primera práctica dot
Primera práctica dotPrimera práctica dot
Primera práctica dot
 
Sne 2009 03sept
Sne 2009 03septSne 2009 03sept
Sne 2009 03sept
 
English dot worws level 1
English dot worws level 1English dot worws level 1
English dot worws level 1
 
GADTs Einführung
GADTs EinführungGADTs Einführung
GADTs Einführung
 
DOT digital group
DOT digital groupDOT digital group
DOT digital group
 
A todo mundo eu dou PSIU (Campus Party 2012)
A todo mundo eu dou PSIU (Campus Party 2012)A todo mundo eu dou PSIU (Campus Party 2012)
A todo mundo eu dou PSIU (Campus Party 2012)
 
Abertura do Evento Dot Net Day
Abertura do Evento Dot Net DayAbertura do Evento Dot Net Day
Abertura do Evento Dot Net Day
 
TU Wien Gastvortrag 07.06.2010, Michaela Mayr
TU Wien Gastvortrag 07.06.2010, Michaela MayrTU Wien Gastvortrag 07.06.2010, Michaela Mayr
TU Wien Gastvortrag 07.06.2010, Michaela Mayr
 
Point supply
Point supplyPoint supply
Point supply
 
Estado final aprendices del curso ENGLISH DOT WORKS A1 LEVEL 1 624803
Estado final aprendices del curso ENGLISH DOT WORKS A1 LEVEL 1 624803Estado final aprendices del curso ENGLISH DOT WORKS A1 LEVEL 1 624803
Estado final aprendices del curso ENGLISH DOT WORKS A1 LEVEL 1 624803
 

Similaire à 20081008 - Tours Jug - Apache Maven

Symphonie pour PHP industrialisé en agilité majeure
Symphonie pour PHP industrialisé en agilité majeureSymphonie pour PHP industrialisé en agilité majeure
Symphonie pour PHP industrialisé en agilité majeure
Marc Nazarian
 
Présentation sur Maven 2 et petit retour d'expérience
Présentation sur Maven 2 et petit retour d'expériencePrésentation sur Maven 2 et petit retour d'expérience
Présentation sur Maven 2 et petit retour d'expérience
Khanh Maudoux
 

Similaire à 20081008 - Tours Jug - Apache Maven (20)

Spring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'tsSpring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'ts
 
Présentation1
Présentation1Présentation1
Présentation1
 
Être productif avec JHipster - Devoxx France 2017
Être productif avec JHipster - Devoxx France 2017Être productif avec JHipster - Devoxx France 2017
Être productif avec JHipster - Devoxx France 2017
 
Octo Maven.pdf
Octo Maven.pdfOcto Maven.pdf
Octo Maven.pdf
 
Symphonie pour PHP industrialisé en agilité majeure
Symphonie pour PHP industrialisé en agilité majeureSymphonie pour PHP industrialisé en agilité majeure
Symphonie pour PHP industrialisé en agilité majeure
 
Présentation sur Maven 2 et petit retour d'expérience
Présentation sur Maven 2 et petit retour d'expériencePrésentation sur Maven 2 et petit retour d'expérience
Présentation sur Maven 2 et petit retour d'expérience
 
Chaine de production pipeline
Chaine de production   pipelineChaine de production   pipeline
Chaine de production pipeline
 
Capitole du Libre 2018 - Déployer des applications python dans un cluster Ope...
Capitole du Libre 2018 - Déployer des applications python dans un cluster Ope...Capitole du Libre 2018 - Déployer des applications python dans un cluster Ope...
Capitole du Libre 2018 - Déployer des applications python dans un cluster Ope...
 
Pyconfr2018 deploy des application python dans un cluster open shift
Pyconfr2018 deploy des application python dans un cluster open shiftPyconfr2018 deploy des application python dans un cluster open shift
Pyconfr2018 deploy des application python dans un cluster open shift
 
Configurer GitHub Actions avec Docker et DotNET 8.pdf
Configurer GitHub Actions avec Docker et DotNET 8.pdfConfigurer GitHub Actions avec Docker et DotNET 8.pdf
Configurer GitHub Actions avec Docker et DotNET 8.pdf
 
Présentation de Django @ Orange Labs (FR)
Présentation de Django @ Orange Labs (FR)Présentation de Django @ Orange Labs (FR)
Présentation de Django @ Orange Labs (FR)
 
At2008 Grenoble Hugonnet Sanlaville Public
At2008 Grenoble Hugonnet Sanlaville PublicAt2008 Grenoble Hugonnet Sanlaville Public
At2008 Grenoble Hugonnet Sanlaville Public
 
De la chaîne de production au SI géré par des logiciels
De la chaîne de production au SI géré par des logicielsDe la chaîne de production au SI géré par des logiciels
De la chaîne de production au SI géré par des logiciels
 
Qualité Logiciel - Outils Open Source pour Java et Web
Qualité Logiciel - Outils Open Source pour Java et WebQualité Logiciel - Outils Open Source pour Java et Web
Qualité Logiciel - Outils Open Source pour Java et Web
 
CI-Jenkins.pptx
CI-Jenkins.pptxCI-Jenkins.pptx
CI-Jenkins.pptx
 
Docker, Pierre angulaire du continuous delivery ?
Docker, Pierre angulaire du continuous delivery ?Docker, Pierre angulaire du continuous delivery ?
Docker, Pierre angulaire du continuous delivery ?
 
Paris Web 2015 - Atelier desendettement javascript
Paris Web 2015 - Atelier desendettement javascriptParis Web 2015 - Atelier desendettement javascript
Paris Web 2015 - Atelier desendettement javascript
 
Presentation du socle technique Java open source Scub Foundation
Presentation du socle technique Java open source Scub FoundationPresentation du socle technique Java open source Scub Foundation
Presentation du socle technique Java open source Scub Foundation
 
Symfony2: 30 astuces et bonnes pratiques
Symfony2: 30 astuces et bonnes pratiquesSymfony2: 30 astuces et bonnes pratiques
Symfony2: 30 astuces et bonnes pratiques
 
Industrialisation PHP - Canal+
Industrialisation PHP - Canal+Industrialisation PHP - Canal+
Industrialisation PHP - Canal+
 

Plus de Arnaud Héritier

Plus de Arnaud Héritier (20)

Devops Recto-Verso @ DevoxxMA
Devops Recto-Verso @ DevoxxMADevops Recto-Verso @ DevoxxMA
Devops Recto-Verso @ DevoxxMA
 
Java is evolving rapidly: Maven helps you staying on track
Java is evolving rapidly:  Maven helps you staying on trackJava is evolving rapidly:  Maven helps you staying on track
Java is evolving rapidly: Maven helps you staying on track
 
Sonar In Action 20110302-vn
Sonar In Action 20110302-vnSonar In Action 20110302-vn
Sonar In Action 20110302-vn
 
2014 August - eXo Software Factory Overview
2014 August - eXo Software Factory Overview2014 August - eXo Software Factory Overview
2014 August - eXo Software Factory Overview
 
CRaSH @ JUGSummerCamp 2012 - Quickie
CRaSH @ JUGSummerCamp 2012 - QuickieCRaSH @ JUGSummerCamp 2012 - Quickie
CRaSH @ JUGSummerCamp 2012 - Quickie
 
LavaJUG-Maven 3.x, will it lives up to its promises
LavaJUG-Maven 3.x, will it lives up to its promisesLavaJUG-Maven 3.x, will it lives up to its promises
LavaJUG-Maven 3.x, will it lives up to its promises
 
Hands on iOS developments with jenkins
Hands on iOS developments with jenkinsHands on iOS developments with jenkins
Hands on iOS developments with jenkins
 
eXo Software Factory Overview
eXo Software Factory OvervieweXo Software Factory Overview
eXo Software Factory Overview
 
Apache Maven - eXo TN presentation
Apache Maven - eXo TN presentationApache Maven - eXo TN presentation
Apache Maven - eXo TN presentation
 
Mobile developments at eXo
Mobile developments at eXoMobile developments at eXo
Mobile developments at eXo
 
Jenkins User Meetup - eXo usages of Jenkins
Jenkins User Meetup - eXo usages of JenkinsJenkins User Meetup - eXo usages of Jenkins
Jenkins User Meetup - eXo usages of Jenkins
 
ToursJUG-Maven 3.x, will it lives up to its promises
ToursJUG-Maven 3.x, will it lives up to its promisesToursJUG-Maven 3.x, will it lives up to its promises
ToursJUG-Maven 3.x, will it lives up to its promises
 
YaJUG-Maven 3.x, will it lives up to its promises
YaJUG-Maven 3.x, will it lives up to its promisesYaJUG-Maven 3.x, will it lives up to its promises
YaJUG-Maven 3.x, will it lives up to its promises
 
BordeauxJUG-Maven 3.x, will it lives up to its promises
BordeauxJUG-Maven 3.x, will it lives up to its promisesBordeauxJUG-Maven 3.x, will it lives up to its promises
BordeauxJUG-Maven 3.x, will it lives up to its promises
 
ToulouseJUG-Maven 3.x, will it lives up to its promises
ToulouseJUG-Maven 3.x, will it lives up to its promisesToulouseJUG-Maven 3.x, will it lives up to its promises
ToulouseJUG-Maven 3.x, will it lives up to its promises
 
Apache Maven - eXo VN office presentation
Apache Maven - eXo VN office presentationApache Maven - eXo VN office presentation
Apache Maven - eXo VN office presentation
 
LyonJUG - Maven 3.x, will it live up to its promises?
LyonJUG - Maven 3.x, will it live up to its promises?LyonJUG - Maven 3.x, will it live up to its promises?
LyonJUG - Maven 3.x, will it live up to its promises?
 
Lorraine JUG (1st June, 2010) - Maven
Lorraine JUG (1st June, 2010) - MavenLorraine JUG (1st June, 2010) - Maven
Lorraine JUG (1st June, 2010) - Maven
 
Riviera JUG (20th April, 2010) - Maven
Riviera JUG (20th April, 2010) - MavenRiviera JUG (20th April, 2010) - Maven
Riviera JUG (20th April, 2010) - Maven
 
Lausanne Jug (08th April, 2010) - Maven
Lausanne Jug (08th April, 2010) - MavenLausanne Jug (08th April, 2010) - Maven
Lausanne Jug (08th April, 2010) - Maven
 

20081008 - Tours Jug - Apache Maven

  • 1. Apache Maven Mise en œuvre en entreprise Java User Group - Tours Mercredi 08 Octobre 2008
  • 2. Arnaud Héritier OCTO Technology Expert sénior aheritier AT octo DOT com http://www.octo.com Maven Développeur (committer) depuis 2004 Membre du conseil de gestion du projet (Project Management Committee) depuis 2005 aheritier AT apache DOT org http://maven.apache.org 2
  • 3. Benoit Lafontaine OCTO Technology Architecte sénior Responsable du Centre de Compétences Java blafontaine AT octo DOT com http://www.octo.com Maven Utilisateur de Maven 2 depuis 2006 3
  • 4. Ce soir Pourquoi Maven ? Maven, les concepts Maven dans l’entreprise Comment faire échouer son projet avec Maven ? 4
  • 5. Pourquoi Maven ? Apache Maven 5
  • 6. Construction d’un war en 2002 Construire un war Utilisation d’Eclipse limitée 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 Gestion manuelle Modifier les fichiers de paramétrage Exporter les différents jar Copier les dépendances (et nos jars), dans un répertoire lib Faire un zip que l’on renomme en war Tagguer l’ensemble des sources dans le répertoire de sources (CVS) Envoi du fichier par FTP sur le serveur d’intégration Se connecter à la console d’administration du serveur et déployer l’application
  • 7. Construction d’un war en 2002 Combien de temps ça prend ? Quand tout va bien : 15 minutes Quand il y a des problèmes : ½ journée Un seul problème, Y’a toujours des problèmes Erreur dans la configuration Oublie d’une dépendance Oublie d’un fichier Correction de dernière minute qui introduit une régression… Autres
  • 8. Une première réponse : ANT Ecriture d’un script Permet d’automatiser le process Durée réduite du processus réduite de moitiée Le processus ne monopolise personne On le lance et on passe à autre chose
  • 9. Les limites de ANT Ecrire le script, c’est long Modifier un script, c’est très long Au final, le gains de temps n’est pas évident Mais c’est quand même plus amusant Il est possible de réutiliser le script !
  • 10. La réutilisation de scripts ANT Les scripts ne sont pas directement réutilisables Structure de projets différents Besoins différents Encore du temps perdu Modification du script Réécriture pour le rendre plus générique  Un nouveau métier s’est créé : scripteur ANT
  • 11. Quelques exemples http://anonsvn.jboss.org/repos/seam/branches/community/Seam_2_0 http://junit.cvs.sourceforge.net/viewvc/junit/junit/build.xml?view=markup http://findbugs.googlecode.com/svn/trunk/findbugs/build.xml
  • 13. L’arrivée de Maven Convention Over Configuration On ne script plus, on décrit son projet (POM) Architecture extensible Des plugins réutilisables évitent la multiplication des scripts de build Gestion des librairies du projet (versions, partage, ..) Référentiels de librairies Dépendances déclaratives Dépendances transitives Amélioration de la qualité des livrables Contrôles Rapports
  • 14. Les conventions 1 projet Maven = 1 artéfact (pom, jar, war, ear, …) 1 organisation des répertoires prédéfinie 1 descripteur standardisé 14
  • 15. Le POM Un fichier XML (pom.xml) Décrivant : Identification du projet Version du projet Description du projet Liste des développeurs Dépendances … <?xml version="1.0" encoding="UTF-8"?> <project> <modelVersion>4.0.0</modelVersion> <groupId>com.octo</groupId> <artifactId>webapp-sample</artifactId> <version>1.1-SNAPSHOT</version> <packaging>war</packaging> <name>Simple webapp</name> <inceptionYear>2007</inceptionYear> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-struts</artifactId> <version>2.0.2</version> </dependency> … </dependencies> </project> 15
  • 16. Les dépendances Déclaratives groupId + artifactId + version (+ classifier) Transitives Lib A  Lib B Lib B  Lib C Alors Lib A  Lib C Scopes d’utilisation Runtime : Taglibs Provided : API Servlet, Driver SGBD, … Compile : par défaut Test : Junit, DBUnit… System : non recommandé Import : Pour charger le dependencyManagement d’un autre pom. 16
  • 17. Sans Maven Avec Maven 17 Les dépendances
  • 18. Les référentiels de d’artéfacts Par défaut : Un central http://repo1.maven.org/maven2 Propose plusieurs dizaines de Go de librairies OSS. Un local ${user.home}/.m2/repository Centralise toutes les artéfacts utilisés et créés par vos projets 18
  • 19. Le reactor Construit un projet et tous ces modules en résolvant l’ordre de leurs dépendances Projet 1 Module A (dépend de B) Module B Module C (dépend de A)  Construira B puis A puis C pom.xml de projet 1 <modules> <module>moduleA</module> <module>moduleC</module> <module>moduleB</module> </modules> 19
  • 20. L’héritage Factorisation de paramètres entre projets/modules L’organisation des sous modules et de l’héritage doit être technique (ejbs, wars, jars) et non pas fonctionnel (serviceA, serviceB, …) Projet1 Jars Jar1 Jar2 Wars War1 … pom.xml de module Jar1 <parent> <groupId>X.Y.Z</groupId> <artifactId>jars</artifactId> <version>1.0-SNAPSHOT</version> </parent> 20
  • 21. L’héritage naturel Lorsque le parent sert aussi de reactor A condition que nom du module = son artifactId Evite la re-définition de certains éléments du pom : Url du site Déploiement du site Informations SCMs 21
  • 22. Site / Documentation Génération d’un site documentaire à partir de documents dans différents formats : Xdocs (xml) Apt (wiki) Docbook …. Génération de rapports sur le projet Descriptif Informations sur les dépendances Documentation automatique des plugins maven Javadoc Xref 22
  • 24. Reporting / Contrôle qualité Reporting - Réactif Je corrige les problèmes une fois étudié le rapport Les problèmes sont dans le gestionnaire de versions Contrôle - Pro-actif Le build échoue si mon code ne respecte pas certaines règles Les problèmes ne sont pas dans le gestionnaire de versions puisque je ne commit jamais un code qui ne build pas Types de contrôles / reporting Résultat de l’exécution des tests : surefire Couverture de tests : clover, cobertura Qualité du code : findbugs Conformité aux standards : checkstyle Patterns / Antipatterns : pmd 24
  • 25. Reporting / Contrôle qualité 25
  • 26. Cycle de vie et plugins 26
  • 28. BuildLocal BuildLocal BuildLocal Build Référentiel binaires Serveur d’intégration continue Doumentation & Métriques Build Récupérer les dépendances Compiler Vérifier les règles de codage Exécuter les tests Gestionnaire de sources Packager Déployer Plateforme démonstration Documenter L’intégration continue Notifications
  • 29. L’intégration continue 29 Automated Tasks Deploy Application onIntegration environment ManualTasks Merge all changes ManualTasks Get last versionof project 1 Package Make binaries Available on acentralized place Commit changeson SCM Test Develop Develop Project 2 Project 1
  • 30. Référentiels de librairies 30 © OCTO Technology 2008
  • 31. Le processus de release 31 Verify that projectdoesn’t depend of“SNAPSHOT” dependencies VerifyUnit Tests(and coding rules) Compile Code Change projectdescriptor to specifyreleased version Verify there’sno more local changes Commitchange Tag sourcesin SCM Checkout tagged sources to be sureof the final binary Verifyunit testsand coding rules Compile Code Deploy binary on centralized repository Package Binary Change projectdescriptor to specifynew current version Commitchange Generateand DeployDocumentation
  • 32. Comment faire échouer son projet avec Maven ? Apache Maven 32
  • 33. 10 bonnes pratiques pour faire échouer son projet Ne pas utiliser les conventions Mettre tout ce qui est possible de mettre dans le pom Se rendre dépendant de l’environnement Multiplier les niveauxd’héritage Utiliser systématiquement "-Dmaven.test.skip=true » Faire les releases à la main S’échanger les jars par mail Utilisation massive du plugin antrun Essayer de définir les dépendances pour les autres 33
  • 34. 10. Passer son temps dans la console
  • 35. Licence Creative Commons Contrat Paternité Pas d'Utilisation Commerciale Partage des Conditions Initiales à l'Identique 2.0 France http://creativecommons.org/licenses/by-nc-sa/2.0/fr/ 35
  • 37. Buffet Merci pour votre attention 37