SlideShare une entreprise Scribd logo
Apache MavenMise en œuvre en entrepriseJava User Group - ToursMercredi 08 Octobre 2008
Arnaud HéritierOCTO TechnologyExpert sénioraheritier AT octo DOT comhttp://www.octo.comMavenDéveloppeur (committer) depuis 2004Membre du conseil de gestion du projet (Project Management Committee) depuis 2005  aheritier AT apache DOT orghttp://maven.apache.org2
Benoit LafontaineOCTO TechnologyArchitecte séniorResponsable du Centre de Compétences Javablafontaine AT octo DOT comhttp://www.octo.comMavenUtilisateur de Maven 2 depuis 20063
Ce soirPourquoi Maven ?Maven, les conceptsMaven dans l’entrepriseComment faire échouer son projet avec Maven ?4
Pourquoi Maven ?Apache Maven5
Construction d’un war en 2002Construire un warUtilisation d’Eclipse limitéeEn ces temps reculés où WTP n’existait pas (uniquement dans la version payante d’IBM), eclipse ne permettait pas d’exporter des WarsGestion manuelleModifier les fichiers de paramétrageExporter les différents jarCopier les dépendances (et nos jars), dans un répertoire libFaire un zip que l’on renomme en warTagguer l’ensemble des sources dans le répertoire de sources (CVS)Envoi du fichier par FTP sur le serveur d’intégrationSe connecter à la console d’administration du serveur et déployer l’application
Construction d’un war en 2002Combien de temps ça prend ?Quand tout va bien : 15 minutesQuand il y a des problèmes : ½ journéeUn seul problème, Y’a toujours des problèmesErreur dans la configurationOublie d’une dépendanceOublie d’un fichierCorrection de dernière minute qui introduit une régression…Autres
Une première réponse : ANTEcriture d’un scriptPermet d’automatiser le processDurée réduite du processus réduite de moitiéeLe processus ne monopolise personneOn le lance et on passe à autre chose
Les limites de ANTEcrire le script, c’est longModifier un script, c’est très longAu final, le gains de temps n’est pas évidentMais c’est quand même plus amusantIl est possible de réutiliser le script !
La réutilisation de scripts ANTLes scripts ne sont pas directement réutilisables Structure de projets différentsBesoins différentsEncore du temps perduModification du scriptRéécriture pour le rendre plus générique Un nouveau métier s’est créé : scripteur ANT
Quelques exempleshttp://anonsvn.jboss.org/repos/seam/branches/community/Seam_2_0http://junit.cvs.sourceforge.net/viewvc/junit/junit/build.xml?view=markuphttp://findbugs.googlecode.com/svn/trunk/findbugs/build.xml
Les CONCEPTSApache Maven12
L’arrivée de MavenConvention Over ConfigurationOn ne script plus, on décrit son projet (POM)Architecture extensibleDes plugins réutilisables évitent la multiplication des scripts de buildGestion des librairies du projet (versions, partage, ..)Référentiels de librairiesDépendances déclarativesDépendances transitivesAmélioration de la qualité des livrablesContrôlesRapports
Les  conventions1 projet Maven = 1 artéfact (pom, jar, war, ear, …)1 organisation des répertoires prédéfinie1 descripteur standardisé14
Le POMUn fichier XML (pom.xml)Décrivant :Identification du projetVersion du projetDescription du projetListe des développeursDé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épendancesDéclarativesgroupId + artifactId + version (+ classifier)TransitivesLib A  Lib BLib B  Lib CAlors Lib A  Lib CScopes d’utilisationRuntime : TaglibsProvided : API Servlet, Driver SGBD, …Compile : par défautTest : Junit, DBUnit…System : non recommandéImport : Pour charger le dependencyManagement d’un autre pom.16
Sans MavenAvec Maven17Les dépendances
Les référentiels de d’artéfactsPar défaut :Un central http://repo1.maven.org/maven2Propose plusieurs dizaines de Go de librairies OSS.Un local ${user.home}/.m2/repositoryCentralise toutes les artéfacts utilisés et créés par vos projets18
Le reactorConstruit un projet et tous ces modules en résolvant l’ordre de leurs dépendancesProjet 1	Module A (dépend de B)Module BModule 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éritageFactorisation de paramètres entre projets/modulesL’organisation des sous modules et de l’héritage doit être technique (ejbs, wars, jars) et non pas fonctionnel (serviceA, serviceB, …)Projet1JarsJar1Jar2WarsWar1…pom.xml de module Jar1<parent>  <groupId>X.Y.Z</groupId>  <artifactId>jars</artifactId>  <version>1.0-SNAPSHOT</version></parent>20
L’héritage naturelLorsque le parent sert aussi de reactorA condition que nom du module = son artifactIdEvite la re-définition de certains éléments du pom :Url du siteDéploiement du site Informations SCMs21
Site / DocumentationGé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 projetDescriptifInformations sur les dépendancesDocumentation automatique des plugins mavenJavadocXref22
Site / Documentation23
Reporting / Contrôle qualitéReporting - RéactifJe corrige les problèmes une fois étudié le rapportLes problèmes sont dans le gestionnaire de versionsContrôle - Pro-actifLe 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 pasTypes de contrôles / reportingRésultat de l’exécution des tests : surefireCouverture de tests : clover, coberturaQualité du code : findbugsConformité aux standards : checkstylePatterns / Antipatterns : pmd24
Reporting / Contrôle qualité25
Cycle de vie et plugins26
Dans l’entrepriseApache Maven27
BuildLocalBuildLocalBuildLocalBuildRéférentielbinairesServeurd’intégrationcontinueDoumentation& MétriquesBuild Récupérer les dépendancesCompilerVérifier les règles de  codageExécuter les testsGestionnaire de sourcesPackagerDéployerPlateformedémonstrationDocumenterL’intégration continueNotifications
L’intégration continue29Automated TasksDeploy Application onIntegrationenvironmentManualTasksMerge all changesManualTasksGet last versionof project 1PackageMake binariesAvailable on acentralized placeCommit changeson SCMTestDevelopDevelopProject 2Project 1
Référentiels de librairies30© OCTO  Technology 2008
Le processus de release31Verify that projectdoesn’t depend of“SNAPSHOT” dependenciesVerifyUnit Tests(and coding rules)CompileCodeChange projectdescriptor to specifyreleased versionVerify there’sno more local changesCommitchangeTag sourcesin SCMCheckout taggedsources to be sureof the final binaryVerifyunit testsand coding rulesCompileCodeDeploy binaryon centralized repositoryPackageBinaryChange projectdescriptor to specifynew current versionCommitchangeGenerateand DeployDocumentation
Comment faire échouer son projet avec Maven ?Apache Maven32
10 bonnes pratiques pour faire échouer son projetNe pas utiliser les conventionsMettre tout ce qui est possible de mettre dans le pomSe rendre dépendant de l’environnementMultiplier les niveauxd’héritageUtiliser systématiquement "-Dmaven.test.skip=true » Faire les releases à la mainS’échanger les jars par mailUtilisation massive du plugin antrunEssayer de définir les dépendances pour les autres33
10. Passer son temps dans la console
LicenceCreative CommonsContrat PaternitéPas d'Utilisation CommercialePartage des Conditions Initiales à l'Identique  2.0 Francehttp://creativecommons.org/licenses/by-nc-sa/2.0/fr/35
Questions ?36
BuffetMerci pour votre attention37

Contenu connexe

Tendances

Présentation Maven
Présentation MavenPrésentation Maven
Présentation Maven
SOAT
 
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
Arnaud Héritier
 
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)
Celinio Fernandes
 
Jenkins
JenkinsJenkins
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
Jean-Marc Fontaine
 
Subversion - Utilisation et bonnes pratiques
Subversion - Utilisation et bonnes pratiquesSubversion - Utilisation et bonnes pratiques
Subversion - Utilisation et bonnes pratiques
Jérôme Vieilledent
 
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)
Celinio Fernandes
 
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
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
Jean-Marc Fontaine
 
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
Jean-Marc Fontaine
 
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 Workflow
Jenkins WorkflowJenkins Workflow
Jenkins Workflow
Jean Detoeuf
 
JENKINS_OWF11_OSDC_PARIS20110924
JENKINS_OWF11_OSDC_PARIS20110924JENKINS_OWF11_OSDC_PARIS20110924
JENKINS_OWF11_OSDC_PARIS20110924
Gregory Boissinot
 
Présentation de Vagrant
Présentation de VagrantPrésentation de Vagrant
Présentation de Vagrant
clmntlxndr
 
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
Jean-Michel Doudoux
 
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
Jonathan Bonzy
 
Concept de l’Intégration Continue
Concept de l’Intégration ContinueConcept de l’Intégration Continue
Concept de l’Intégration Continue
Frédéric Sagez
 
Maven
MavenMaven

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
 
Graphiz - Using the DOT Language
Graphiz - Using the DOT LanguageGraphiz - Using the DOT Language
Graphiz - Using the DOT Language
albazo
 
Juegos y Mundos Virtuales
Juegos y Mundos VirtualesJuegos y Mundos Virtuales
Juegos y Mundos Virtuales
Marlon Manrique
 
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
 
Barrett m107
Barrett m107Barrett m107
Barrett m107
blogcodema
 
Modos De OperaçãO Snort Campusparty2010
Modos De OperaçãO Snort Campusparty2010Modos De OperaçãO Snort Campusparty2010
Modos De OperaçãO Snort Campusparty2010
clebeer brandao
 
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
Ericsson Latin America
 
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
 
Primera práctica dot
Primera práctica dotPrimera práctica dot
Primera práctica dot
María García
 
Sne 2009 03sept
Sne 2009 03septSne 2009 03sept
Sne 2009 03sept
PsyNuGen
 
English dot worws level 1
English dot worws level 1English dot worws level 1
English dot worws level 1
mafesita2
 
GADTs Einführung
GADTs EinführungGADTs Einführung
GADTs Einführung
smu42
 
DOT digital group
DOT digital groupDOT digital group
DOT 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)
Thiago Figueredo Cardoso
 
Abertura do Evento Dot Net Day
Abertura do Evento Dot Net DayAbertura do Evento Dot Net Day
Abertura do Evento Dot Net Day
Luciano Palma
 
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

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
Julien Wittouck
 
Présentation1
Présentation1Présentation1
Présentation1
Boulkenafet samir
 
Ê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
Julien Dubois
 
Octo Maven.pdf
Octo Maven.pdfOcto Maven.pdf
Octo Maven.pdf
badrfathallah2
 
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
 
Chaine de production pipeline
Chaine de production   pipelineChaine de production   pipeline
Chaine de production pipeline
Nicolas wallerand
 
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...
Arthur Lutz
 
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
Arthur Lutz
 
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
Hamida Rebai Trabelsi
 
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)
Martin Latrille
 
At2008 Grenoble Hugonnet Sanlaville Public
At2008 Grenoble Hugonnet Sanlaville PublicAt2008 Grenoble Hugonnet Sanlaville Public
At2008 Grenoble Hugonnet Sanlaville Public
Emmanuel Hugonnet
 
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
Johan Moreau
 
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
Christophe Rochefolle
 
CI-Jenkins.pptx
CI-Jenkins.pptxCI-Jenkins.pptx
CI-Jenkins.pptx
MEDOBEST1
 
Docker, Pierre angulaire du continuous delivery ?
Docker, Pierre angulaire du continuous delivery ?Docker, Pierre angulaire du continuous delivery ?
Docker, Pierre angulaire du continuous delivery ?
Adrien Blind
 
Paris Web 2015 - Atelier desendettement javascript
Paris Web 2015 - Atelier desendettement javascriptParis Web 2015 - Atelier desendettement javascript
Paris Web 2015 - Atelier desendettement javascript
Michael Akbaraly
 
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
Stéphane Traumat
 
Symfony2: 30 astuces et bonnes pratiques
Symfony2: 30 astuces et bonnes pratiquesSymfony2: 30 astuces et bonnes pratiques
Symfony2: 30 astuces et bonnes pratiques
Noel GUILBERT
 
Industrialisation PHP - Canal+
Industrialisation PHP - Canal+Industrialisation PHP - Canal+
Industrialisation PHP - Canal+
ekino
 

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

Devops Recto-Verso @ DevoxxMA
Devops Recto-Verso @ DevoxxMADevops Recto-Verso @ DevoxxMA
Devops Recto-Verso @ DevoxxMA
Arnaud Héritier
 
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
Arnaud Héritier
 
Sonar In Action 20110302-vn
Sonar In Action 20110302-vnSonar In Action 20110302-vn
Sonar In Action 20110302-vn
Arnaud Héritier
 
2014 August - eXo Software Factory Overview
2014 August - eXo Software Factory Overview2014 August - eXo Software Factory Overview
2014 August - eXo Software Factory Overview
Arnaud Héritier
 
CRaSH @ JUGSummerCamp 2012 - Quickie
CRaSH @ JUGSummerCamp 2012 - QuickieCRaSH @ JUGSummerCamp 2012 - Quickie
CRaSH @ JUGSummerCamp 2012 - Quickie
Arnaud Héritier
 
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
Arnaud Héritier
 
Hands on iOS developments with jenkins
Hands on iOS developments with jenkinsHands on iOS developments with jenkins
Hands on iOS developments with jenkins
Arnaud Héritier
 
eXo Software Factory Overview
eXo Software Factory OvervieweXo Software Factory Overview
eXo Software Factory Overview
Arnaud Héritier
 
Apache Maven - eXo TN presentation
Apache Maven - eXo TN presentationApache Maven - eXo TN presentation
Apache Maven - eXo TN presentation
Arnaud Héritier
 
Mobile developments at eXo
Mobile developments at eXoMobile developments at eXo
Mobile developments at eXo
Arnaud Héritier
 
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
Arnaud Héritier
 
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
Arnaud Héritier
 
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
Arnaud Héritier
 
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
Arnaud Héritier
 
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
Arnaud Héritier
 
Apache Maven - eXo VN office presentation
Apache Maven - eXo VN office presentationApache Maven - eXo VN office presentation
Apache Maven - eXo VN office presentation
Arnaud Héritier
 
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?
Arnaud Héritier
 
Lorraine JUG (1st June, 2010) - Maven
Lorraine JUG (1st June, 2010) - MavenLorraine JUG (1st June, 2010) - Maven
Lorraine JUG (1st June, 2010) - Maven
Arnaud Héritier
 
Riviera JUG (20th April, 2010) - Maven
Riviera JUG (20th April, 2010) - MavenRiviera JUG (20th April, 2010) - Maven
Riviera JUG (20th April, 2010) - Maven
Arnaud Héritier
 
Lausanne Jug (08th April, 2010) - Maven
Lausanne Jug (08th April, 2010) - MavenLausanne Jug (08th April, 2010) - Maven
Lausanne Jug (08th April, 2010) - Maven
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 MavenMise en œuvre en entrepriseJava User Group - ToursMercredi 08 Octobre 2008
  • 2. Arnaud HéritierOCTO TechnologyExpert sénioraheritier AT octo DOT comhttp://www.octo.comMavenDéveloppeur (committer) depuis 2004Membre du conseil de gestion du projet (Project Management Committee) depuis 2005 aheritier AT apache DOT orghttp://maven.apache.org2
  • 3. Benoit LafontaineOCTO TechnologyArchitecte séniorResponsable du Centre de Compétences Javablafontaine AT octo DOT comhttp://www.octo.comMavenUtilisateur de Maven 2 depuis 20063
  • 4. Ce soirPourquoi Maven ?Maven, les conceptsMaven dans l’entrepriseComment faire échouer son projet avec Maven ?4
  • 6. Construction d’un war en 2002Construire un warUtilisation d’Eclipse limitéeEn ces temps reculés où WTP n’existait pas (uniquement dans la version payante d’IBM), eclipse ne permettait pas d’exporter des WarsGestion manuelleModifier les fichiers de paramétrageExporter les différents jarCopier les dépendances (et nos jars), dans un répertoire libFaire un zip que l’on renomme en warTagguer l’ensemble des sources dans le répertoire de sources (CVS)Envoi du fichier par FTP sur le serveur d’intégrationSe connecter à la console d’administration du serveur et déployer l’application
  • 7. Construction d’un war en 2002Combien de temps ça prend ?Quand tout va bien : 15 minutesQuand il y a des problèmes : ½ journéeUn seul problème, Y’a toujours des problèmesErreur dans la configurationOublie d’une dépendanceOublie d’un fichierCorrection de dernière minute qui introduit une régression…Autres
  • 8. Une première réponse : ANTEcriture d’un scriptPermet d’automatiser le processDurée réduite du processus réduite de moitiéeLe processus ne monopolise personneOn le lance et on passe à autre chose
  • 9. Les limites de ANTEcrire le script, c’est longModifier un script, c’est très longAu final, le gains de temps n’est pas évidentMais c’est quand même plus amusantIl est possible de réutiliser le script !
  • 10. La réutilisation de scripts ANTLes scripts ne sont pas directement réutilisables Structure de projets différentsBesoins différentsEncore du temps perduModification du scriptRéécriture pour le rendre plus générique Un nouveau métier s’est créé : scripteur ANT
  • 13. L’arrivée de MavenConvention Over ConfigurationOn ne script plus, on décrit son projet (POM)Architecture extensibleDes plugins réutilisables évitent la multiplication des scripts de buildGestion des librairies du projet (versions, partage, ..)Référentiels de librairiesDépendances déclarativesDépendances transitivesAmélioration de la qualité des livrablesContrôlesRapports
  • 14. Les conventions1 projet Maven = 1 artéfact (pom, jar, war, ear, …)1 organisation des répertoires prédéfinie1 descripteur standardisé14
  • 15. Le POMUn fichier XML (pom.xml)Décrivant :Identification du projetVersion du projetDescription du projetListe des développeursDé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épendancesDéclarativesgroupId + artifactId + version (+ classifier)TransitivesLib A  Lib BLib B  Lib CAlors Lib A  Lib CScopes d’utilisationRuntime : TaglibsProvided : API Servlet, Driver SGBD, …Compile : par défautTest : Junit, DBUnit…System : non recommandéImport : Pour charger le dependencyManagement d’un autre pom.16
  • 18. Les référentiels de d’artéfactsPar défaut :Un central http://repo1.maven.org/maven2Propose plusieurs dizaines de Go de librairies OSS.Un local ${user.home}/.m2/repositoryCentralise toutes les artéfacts utilisés et créés par vos projets18
  • 19. Le reactorConstruit un projet et tous ces modules en résolvant l’ordre de leurs dépendancesProjet 1 Module A (dépend de B)Module BModule 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éritageFactorisation de paramètres entre projets/modulesL’organisation des sous modules et de l’héritage doit être technique (ejbs, wars, jars) et non pas fonctionnel (serviceA, serviceB, …)Projet1JarsJar1Jar2WarsWar1…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 naturelLorsque le parent sert aussi de reactorA condition que nom du module = son artifactIdEvite la re-définition de certains éléments du pom :Url du siteDéploiement du site Informations SCMs21
  • 22. Site / DocumentationGé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 projetDescriptifInformations sur les dépendancesDocumentation automatique des plugins mavenJavadocXref22
  • 24. Reporting / Contrôle qualitéReporting - RéactifJe corrige les problèmes une fois étudié le rapportLes problèmes sont dans le gestionnaire de versionsContrôle - Pro-actifLe 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 pasTypes de contrôles / reportingRésultat de l’exécution des tests : surefireCouverture de tests : clover, coberturaQualité du code : findbugsConformité aux standards : checkstylePatterns / Antipatterns : pmd24
  • 26. Cycle de vie et plugins26
  • 28. BuildLocalBuildLocalBuildLocalBuildRéférentielbinairesServeurd’intégrationcontinueDoumentation& MétriquesBuild Récupérer les dépendancesCompilerVérifier les règles de codageExécuter les testsGestionnaire de sourcesPackagerDéployerPlateformedémonstrationDocumenterL’intégration continueNotifications
  • 29. L’intégration continue29Automated TasksDeploy Application onIntegrationenvironmentManualTasksMerge all changesManualTasksGet last versionof project 1PackageMake binariesAvailable on acentralized placeCommit changeson SCMTestDevelopDevelopProject 2Project 1
  • 30. Référentiels de librairies30© OCTO Technology 2008
  • 31. Le processus de release31Verify that projectdoesn’t depend of“SNAPSHOT” dependenciesVerifyUnit Tests(and coding rules)CompileCodeChange projectdescriptor to specifyreleased versionVerify there’sno more local changesCommitchangeTag sourcesin SCMCheckout taggedsources to be sureof the final binaryVerifyunit testsand coding rulesCompileCodeDeploy binaryon centralized repositoryPackageBinaryChange projectdescriptor to specifynew current versionCommitchangeGenerateand DeployDocumentation
  • 32. Comment faire échouer son projet avec Maven ?Apache Maven32
  • 33. 10 bonnes pratiques pour faire échouer son projetNe pas utiliser les conventionsMettre tout ce qui est possible de mettre dans le pomSe rendre dépendant de l’environnementMultiplier les niveauxd’héritageUtiliser systématiquement "-Dmaven.test.skip=true » Faire les releases à la mainS’échanger les jars par mailUtilisation massive du plugin antrunEssayer de définir les dépendances pour les autres33
  • 34. 10. Passer son temps dans la console
  • 35. LicenceCreative CommonsContrat PaternitéPas d'Utilisation CommercialePartage des Conditions Initiales à l'Identique 2.0 Francehttp://creativecommons.org/licenses/by-nc-sa/2.0/fr/35