SlideShare une entreprise Scribd logo
Apache Maven Initiation Paris VI - Master STL-TA Jeudi 23 Octobre 2008
Arnaud Héritier OCTO Technology Expert sénior aheritier AT octo DOT com http://www.octo.com Maven Committer depuis 2004 Membre du PMC (Project Management Committee) depuis 2005   aheritier AT apache DOT org http://maven.apache.org DESS GLA (ex Master STL-TA) Promotion 1999 2
http://tinyurl.com/6r5v8p http://tinyurl.com/5uv6lg 3 Bibliographie
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/ 4
Aujourd’hui Pourquoi Maven ? Maven, les concepts Maven, sa place dans l’entreprise Comment faire échouer son projet avec Maven ? Démonstration 5
Pourquoi Maven ? Apache Maven 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
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 processus Durée réduite du processus réduite de moitié 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 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
Les  conventions 1 projet Maven = 1 artéfact (pom, jar, war, ear, …) 1 organisation des répertoires prédéfinie 1 descripteur standardisé Des cycles de construction standardisés 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> 16
Cycle de vie et plugins 17
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 tous les artéfacts utilisés et créés par vos projets 18
Sans Maven Avec Maven 19 Les dépendances
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é 20
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> 21
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> 22
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 23
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 24
Site / Documentation 25
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 26
Reporting / Contrôle qualité 27
Et encore  . . . Profiles Properties Assemblies Archetypes 28
Sa place dans l’entreprise Apache Maven 29
Référentiels de librairies 30 © OCTO  Technology 2008
L’intégration continue
L’intégration continue – Multi-projets 32
Le processus de release 33
Comment faire échouer son projet avec Maven ? Apache Maven 34
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 35
10. Passer son temps dans la console
Démonstration Apache Maven 37
Initialiser un projet From scratch A l’ancienne Avec m2eclipse Depuis un modèle (archetype) En ligne de commande Avec m2eclipse 38
Gérer les dépendances Recherche de dépendances Mvnrepository.com m2eclipse Dépendances simples Dépendances avancées Ranges Scopes Excludes Analyse des dépendances dependency:tree dependency:analyze 39
Multi-modules Ajout de modules Dépendances entre modules Le reactor Son rôle Le plugin du même nom 40
Héritage Héritage entre modules Mise en place d’un dependencyManagement 41
Plugins Configuration des plugins PluginsManagement 42
Documentation & Reporting Différents formats pour la documentation : Xdoc, APT Configuration des rapports Descripteur de site 43
Questions ? Merci pour votre attention 44

Contenu connexe

Tendances

Industrialisation Du Logiciel - Introduction Et Bonnes Pratiques
Industrialisation Du Logiciel  - Introduction Et Bonnes PratiquesIndustrialisation Du Logiciel  - Introduction Et Bonnes Pratiques
Industrialisation Du Logiciel - Introduction Et Bonnes PratiquesEmmanuel Hugonnet
 
Tests Dinterface SWT
Tests Dinterface SWTTests Dinterface SWT
Tests Dinterface SWTEric Le Merdy
 
Intégration continue transco
Intégration continue transcoIntégration continue transco
Intégration continue transcolaurent_opnworks
 
Presentation Rex Methodes Agiles
Presentation Rex Methodes AgilesPresentation Rex Methodes Agiles
Presentation Rex Methodes AgilesIppon
 
Présentation Maven
Présentation MavenPrésentation Maven
Présentation MavenSOAT
 
Formation Spring Avancé gratuite par Ippon 2014
Formation Spring Avancé gratuite par Ippon 2014Formation Spring Avancé gratuite par Ippon 2014
Formation Spring Avancé gratuite par Ippon 2014Ippon
 
Sonar 2.0 au JUG Genève
Sonar 2.0 au JUG GenèveSonar 2.0 au JUG Genève
Sonar 2.0 au JUG GenèveFreddy Mallet
 
JCertif 2012 : Integration continue avec Jenkins
JCertif 2012 : Integration continue avec JenkinsJCertif 2012 : Integration continue avec Jenkins
JCertif 2012 : Integration continue avec JenkinsRossi Oddet
 
Concept de l’Intégration Continue
Concept de l’Intégration ContinueConcept de l’Intégration Continue
Concept de l’Intégration ContinueFrédéric Sagez
 
Commencer avec le tdd
Commencer avec le tddCommencer avec le tdd
Commencer avec le tddEric Hogue
 
Allons plus loin avec Selenium
Allons plus loin avec SeleniumAllons plus loin avec Selenium
Allons plus loin avec SeleniumSOAT
 
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 2017Jean-Michel Doudoux
 
Intégration continue
Intégration continueIntégration continue
Intégration continueKlee Group
 
Quid de vos applications symfony 1
Quid de vos applications symfony 1Quid de vos applications symfony 1
Quid de vos applications symfony 1marchugon
 
Integration continue - Introduction
Integration continue - IntroductionIntegration continue - Introduction
Integration continue - IntroductionOlivier ETIENNE
 
20111220 lyon jug-packaging-natif
20111220 lyon jug-packaging-natif20111220 lyon jug-packaging-natif
20111220 lyon jug-packaging-natifHenri Gomez
 
Reunion Technique PMSIpilot - Janvier 2010
Reunion Technique PMSIpilot - Janvier 2010Reunion Technique PMSIpilot - Janvier 2010
Reunion Technique PMSIpilot - Janvier 2010PMSIpilot
 
Les générateurs de code, pour se simplifier la vie au quotidien
Les générateurs de code, pour se simplifier la vie au quotidienLes générateurs de code, pour se simplifier la vie au quotidien
Les générateurs de code, pour se simplifier la vie au quotidienNicolas Carlo
 
Formation Extreme Programming, Tests unitaires, travail collaboratif
Formation Extreme Programming, Tests unitaires, travail collaboratifFormation Extreme Programming, Tests unitaires, travail collaboratif
Formation Extreme Programming, Tests unitaires, travail collaboratifkemenaran
 

Tendances (20)

Industrialisation Du Logiciel - Introduction Et Bonnes Pratiques
Industrialisation Du Logiciel  - Introduction Et Bonnes PratiquesIndustrialisation Du Logiciel  - Introduction Et Bonnes Pratiques
Industrialisation Du Logiciel - Introduction Et Bonnes Pratiques
 
Tests Dinterface SWT
Tests Dinterface SWTTests Dinterface SWT
Tests Dinterface SWT
 
Intégration continue transco
Intégration continue transcoIntégration continue transco
Intégration continue transco
 
Presentation Rex Methodes Agiles
Presentation Rex Methodes AgilesPresentation Rex Methodes Agiles
Presentation Rex Methodes Agiles
 
Présentation Maven
Présentation MavenPrésentation Maven
Présentation Maven
 
Formation Spring Avancé gratuite par Ippon 2014
Formation Spring Avancé gratuite par Ippon 2014Formation Spring Avancé gratuite par Ippon 2014
Formation Spring Avancé gratuite par Ippon 2014
 
Sonar 2.0 au JUG Genève
Sonar 2.0 au JUG GenèveSonar 2.0 au JUG Genève
Sonar 2.0 au JUG Genève
 
JCertif 2012 : Integration continue avec Jenkins
JCertif 2012 : Integration continue avec JenkinsJCertif 2012 : Integration continue avec Jenkins
JCertif 2012 : Integration continue avec Jenkins
 
Concept de l’Intégration Continue
Concept de l’Intégration ContinueConcept de l’Intégration Continue
Concept de l’Intégration Continue
 
Commencer avec le tdd
Commencer avec le tddCommencer avec le tdd
Commencer avec le tdd
 
Allons plus loin avec Selenium
Allons plus loin avec SeleniumAllons plus loin avec Selenium
Allons plus loin avec Selenium
 
Valider par des tests - Blend
Valider par des tests - BlendValider par des tests - Blend
Valider par des tests - Blend
 
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
 
Intégration continue
Intégration continueIntégration continue
Intégration continue
 
Quid de vos applications symfony 1
Quid de vos applications symfony 1Quid de vos applications symfony 1
Quid de vos applications symfony 1
 
Integration continue - Introduction
Integration continue - IntroductionIntegration continue - Introduction
Integration continue - Introduction
 
20111220 lyon jug-packaging-natif
20111220 lyon jug-packaging-natif20111220 lyon jug-packaging-natif
20111220 lyon jug-packaging-natif
 
Reunion Technique PMSIpilot - Janvier 2010
Reunion Technique PMSIpilot - Janvier 2010Reunion Technique PMSIpilot - Janvier 2010
Reunion Technique PMSIpilot - Janvier 2010
 
Les générateurs de code, pour se simplifier la vie au quotidien
Les générateurs de code, pour se simplifier la vie au quotidienLes générateurs de code, pour se simplifier la vie au quotidien
Les générateurs de code, pour se simplifier la vie au quotidien
 
Formation Extreme Programming, Tests unitaires, travail collaboratif
Formation Extreme Programming, Tests unitaires, travail collaboratifFormation Extreme Programming, Tests unitaires, travail collaboratif
Formation Extreme Programming, Tests unitaires, travail collaboratif
 

En vedette

ARM Architecture-based System Virtualization: Xen ARM open source software pr...
ARM Architecture-based System Virtualization: Xen ARM open source software pr...ARM Architecture-based System Virtualization: Xen ARM open source software pr...
ARM Architecture-based System Virtualization: Xen ARM open source software pr...The Linux Foundation
 
Cahier des charges_sti2_d_-_stl2
Cahier des charges_sti2_d_-_stl2Cahier des charges_sti2_d_-_stl2
Cahier des charges_sti2_d_-_stl2Claude Oziard
 
Les imprimanres 3 d
Les imprimanres 3 dLes imprimanres 3 d
Les imprimanres 3 ddihiaselma
 
Os3d presentation 2015
Os3d presentation 2015Os3d presentation 2015
Os3d presentation 2015Philippe PERES
 
Brochure détecteurs de vision 3D (2009)
Brochure détecteurs de vision 3D (2009)Brochure détecteurs de vision 3D (2009)
Brochure détecteurs de vision 3D (2009)ifm electronic gmbh
 
4. Memory virtualization and management
4. Memory virtualization and management4. Memory virtualization and management
4. Memory virtualization and managementHwanju Kim
 
3. CPU virtualization and scheduling
3. CPU virtualization and scheduling3. CPU virtualization and scheduling
3. CPU virtualization and schedulingHwanju Kim
 
Terrassement - calcul de volume
Terrassement - calcul de volume Terrassement - calcul de volume
Terrassement - calcul de volume Abdessadek ELASRI
 
.logistique gestion des stock
.logistique gestion des stock .logistique gestion des stock
.logistique gestion des stock Yassine Badri
 
La simulation 3D au service du marketing et de la vente
La simulation 3D au service du marketing et de la venteLa simulation 3D au service du marketing et de la vente
La simulation 3D au service du marketing et de la venteVISIMMO 3D
 

En vedette (15)

ARM Architecture-based System Virtualization: Xen ARM open source software pr...
ARM Architecture-based System Virtualization: Xen ARM open source software pr...ARM Architecture-based System Virtualization: Xen ARM open source software pr...
ARM Architecture-based System Virtualization: Xen ARM open source software pr...
 
Xen & virtualization
Xen & virtualizationXen & virtualization
Xen & virtualization
 
Cahier des charges_sti2_d_-_stl2
Cahier des charges_sti2_d_-_stl2Cahier des charges_sti2_d_-_stl2
Cahier des charges_sti2_d_-_stl2
 
Les imprimanres 3 d
Les imprimanres 3 dLes imprimanres 3 d
Les imprimanres 3 d
 
2. OS vs. VMM
2. OS vs. VMM2. OS vs. VMM
2. OS vs. VMM
 
Xen Memory Management
Xen Memory ManagementXen Memory Management
Xen Memory Management
 
Os3d presentation 2015
Os3d presentation 2015Os3d presentation 2015
Os3d presentation 2015
 
Ogre 3D : une introduction
Ogre 3D : une introductionOgre 3D : une introduction
Ogre 3D : une introduction
 
Brochure détecteurs de vision 3D (2009)
Brochure détecteurs de vision 3D (2009)Brochure détecteurs de vision 3D (2009)
Brochure détecteurs de vision 3D (2009)
 
4. Memory virtualization and management
4. Memory virtualization and management4. Memory virtualization and management
4. Memory virtualization and management
 
3. CPU virtualization and scheduling
3. CPU virtualization and scheduling3. CPU virtualization and scheduling
3. CPU virtualization and scheduling
 
Terrassement - calcul de volume
Terrassement - calcul de volume Terrassement - calcul de volume
Terrassement - calcul de volume
 
.logistique gestion des stock
.logistique gestion des stock .logistique gestion des stock
.logistique gestion des stock
 
Reconstruction 3 D
Reconstruction 3 DReconstruction 3 D
Reconstruction 3 D
 
La simulation 3D au service du marketing et de la vente
La simulation 3D au service du marketing et de la venteLa simulation 3D au service du marketing et de la vente
La simulation 3D au service du marketing et de la vente
 

Similaire à 20081023 - Paris Vi Master STL TA - Initiation Maven

Paris Web 2015 - Atelier desendettement javascript
Paris Web 2015 - Atelier desendettement javascriptParis Web 2015 - Atelier desendettement javascript
Paris Web 2015 - Atelier desendettement javascriptMichael Akbaraly
 
20091020 - Normandy Jug - Builders Battle
20091020 - Normandy Jug - Builders Battle20091020 - Normandy Jug - Builders Battle
20091020 - Normandy Jug - Builders BattleArnaud Héritier
 
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é majeureMarc Nazarian
 
Paris Web 2015 - Atelier désendettement Javascript legacy
Paris Web 2015 - Atelier désendettement Javascript legacyParis Web 2015 - Atelier désendettement Javascript legacy
Paris Web 2015 - Atelier désendettement Javascript legacyFrançois Petitit
 
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érienceKhanh Maudoux
 
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'tsJulien Wittouck
 
Présentation Rex GWT 2.0
Présentation Rex GWT 2.0Présentation Rex GWT 2.0
Présentation Rex GWT 2.0Ippon
 
Industrialisation PHP - Canal+
Industrialisation PHP - Canal+Industrialisation PHP - Canal+
Industrialisation PHP - Canal+ekino
 
Chaine de production pipeline
Chaine de production   pipelineChaine de production   pipeline
Chaine de production pipelineNicolas wallerand
 
At2008 Grenoble Hugonnet Sanlaville Public
At2008 Grenoble Hugonnet Sanlaville PublicAt2008 Grenoble Hugonnet Sanlaville Public
At2008 Grenoble Hugonnet Sanlaville PublicEmmanuel Hugonnet
 
Production logicielle, outils et pratiques
Production logicielle, outils et pratiquesProduction logicielle, outils et pratiques
Production logicielle, outils et pratiquesJohan Moreau
 
Industrialisation des développements logiciels
Industrialisation des développements logicielsIndustrialisation des développements logiciels
Industrialisation des développements logicielsSylvain Leroy
 
Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...
Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...
Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...ENSIBS
 
Comment travailler avec les logiciels Open Source
Comment travailler avec les logiciels Open SourceComment travailler avec les logiciels Open Source
Comment travailler avec les logiciels Open SourceChristian Charreyre
 
Déploiement, orchestration & sécurisation d’APIs
Déploiement, orchestration & sécurisation d’APIsDéploiement, orchestration & sécurisation d’APIs
Déploiement, orchestration & sécurisation d’APIsNicolas Herbaut
 
20131024 qualité de code et sonar - mug lyon
20131024   qualité de code et sonar - mug lyon20131024   qualité de code et sonar - mug lyon
20131024 qualité de code et sonar - mug lyonClement Bouillier
 
Ê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 2017Julien Dubois
 
Node, Grunt et leurs copains qui font de l’accessibilité tout seuls !
Node, Grunt et leurs copains qui font de l’accessibilité tout seuls !Node, Grunt et leurs copains qui font de l’accessibilité tout seuls !
Node, Grunt et leurs copains qui font de l’accessibilité tout seuls !vincent aniort
 
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 shiftArthur Lutz
 

Similaire à 20081023 - Paris Vi Master STL TA - Initiation Maven (20)

Paris Web 2015 - Atelier desendettement javascript
Paris Web 2015 - Atelier desendettement javascriptParis Web 2015 - Atelier desendettement javascript
Paris Web 2015 - Atelier desendettement javascript
 
20091020 - Normandy Jug - Builders Battle
20091020 - Normandy Jug - Builders Battle20091020 - Normandy Jug - Builders Battle
20091020 - Normandy Jug - Builders Battle
 
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
 
Paris Web 2015 - Atelier désendettement Javascript legacy
Paris Web 2015 - Atelier désendettement Javascript legacyParis Web 2015 - Atelier désendettement Javascript legacy
Paris Web 2015 - Atelier désendettement Javascript legacy
 
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
 
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ésentation Rex GWT 2.0
Présentation Rex GWT 2.0Présentation Rex GWT 2.0
Présentation Rex GWT 2.0
 
Industrialisation PHP - Canal+
Industrialisation PHP - Canal+Industrialisation PHP - Canal+
Industrialisation PHP - Canal+
 
Chaine de production pipeline
Chaine de production   pipelineChaine de production   pipeline
Chaine de production pipeline
 
At2008 Grenoble Hugonnet Sanlaville Public
At2008 Grenoble Hugonnet Sanlaville PublicAt2008 Grenoble Hugonnet Sanlaville Public
At2008 Grenoble Hugonnet Sanlaville Public
 
Production logicielle, outils et pratiques
Production logicielle, outils et pratiquesProduction logicielle, outils et pratiques
Production logicielle, outils et pratiques
 
Industrialisation des développements logiciels
Industrialisation des développements logicielsIndustrialisation des développements logiciels
Industrialisation des développements logiciels
 
Etude des Frameworks PHP
Etude des Frameworks PHPEtude des Frameworks PHP
Etude des Frameworks PHP
 
Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...
Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...
Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...
 
Comment travailler avec les logiciels Open Source
Comment travailler avec les logiciels Open SourceComment travailler avec les logiciels Open Source
Comment travailler avec les logiciels Open Source
 
Déploiement, orchestration & sécurisation d’APIs
Déploiement, orchestration & sécurisation d’APIsDéploiement, orchestration & sécurisation d’APIs
Déploiement, orchestration & sécurisation d’APIs
 
20131024 qualité de code et sonar - mug lyon
20131024   qualité de code et sonar - mug lyon20131024   qualité de code et sonar - mug lyon
20131024 qualité de code et sonar - mug lyon
 
Ê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
 
Node, Grunt et leurs copains qui font de l’accessibilité tout seuls !
Node, Grunt et leurs copains qui font de l’accessibilité tout seuls !Node, Grunt et leurs copains qui font de l’accessibilité tout seuls !
Node, Grunt et leurs copains qui font de l’accessibilité tout seuls !
 
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
 

Plus de Arnaud Héritier

Devops Recto-Verso @ DevoxxMA
Devops Recto-Verso @ DevoxxMADevops Recto-Verso @ DevoxxMA
Devops Recto-Verso @ DevoxxMAArnaud 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 trackArnaud Héritier
 
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 railsArnaud Héritier
 
Sonar In Action 20110302-vn
Sonar In Action 20110302-vnSonar In Action 20110302-vn
Sonar In Action 20110302-vnArnaud Héritier
 
2014 August - eXo Software Factory Overview
2014 August - eXo Software Factory Overview2014 August - eXo Software Factory Overview
2014 August - eXo Software Factory OverviewArnaud Héritier
 
CRaSH @ JUGSummerCamp 2012 - Quickie
CRaSH @ JUGSummerCamp 2012 - QuickieCRaSH @ JUGSummerCamp 2012 - Quickie
CRaSH @ JUGSummerCamp 2012 - QuickieArnaud 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 promisesArnaud Héritier
 
Hands on iOS developments with jenkins
Hands on iOS developments with jenkinsHands on iOS developments with jenkins
Hands on iOS developments with jenkinsArnaud Héritier
 
eXo Software Factory Overview
eXo Software Factory OvervieweXo Software Factory Overview
eXo Software Factory OverviewArnaud Héritier
 
Apache Maven - eXo TN presentation
Apache Maven - eXo TN presentationApache Maven - eXo TN presentation
Apache Maven - eXo TN presentationArnaud Héritier
 
Mobile developments at eXo
Mobile developments at eXoMobile developments at eXo
Mobile developments at eXoArnaud 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 JenkinsArnaud 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 promisesArnaud 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 promisesArnaud 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 promisesArnaud 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 promisesArnaud Héritier
 
Apache Maven - eXo VN office presentation
Apache Maven - eXo VN office presentationApache Maven - eXo VN office presentation
Apache Maven - eXo VN office presentationArnaud 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) - MavenArnaud Héritier
 
Riviera JUG (20th April, 2010) - Maven
Riviera JUG (20th April, 2010) - MavenRiviera JUG (20th April, 2010) - Maven
Riviera JUG (20th April, 2010) - MavenArnaud 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
 
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
 
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
 

20081023 - Paris Vi Master STL TA - Initiation Maven

  • 1. Apache Maven Initiation Paris VI - Master STL-TA Jeudi 23 Octobre 2008
  • 2. Arnaud Héritier OCTO Technology Expert sénior aheritier AT octo DOT com http://www.octo.com Maven Committer depuis 2004 Membre du PMC (Project Management Committee) depuis 2005 aheritier AT apache DOT org http://maven.apache.org DESS GLA (ex Master STL-TA) Promotion 1999 2
  • 4. 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/ 4
  • 5. Aujourd’hui Pourquoi Maven ? Maven, les concepts Maven, sa place dans l’entreprise Comment faire échouer son projet avec Maven ? Démonstration 5
  • 6. Pourquoi Maven ? Apache Maven 6
  • 7. 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
  • 8. 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
  • 9. Une première réponse : ANT Ecriture d’un script Permet d’automatiser le processus Durée réduite du processus réduite de moitié Le processus ne monopolise personne On le lance et on passe à autre chose
  • 10. 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 !
  • 11. 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
  • 12. 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
  • 14. 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
  • 15. Les conventions 1 projet Maven = 1 artéfact (pom, jar, war, ear, …) 1 organisation des répertoires prédéfinie 1 descripteur standardisé Des cycles de construction standardisés 15
  • 16. 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> 16
  • 17. Cycle de vie et plugins 17
  • 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 tous les artéfacts utilisés et créés par vos projets 18
  • 19. Sans Maven Avec Maven 19 Les dépendances
  • 20. 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é 20
  • 21. 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> 21
  • 22. 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> 22
  • 23. 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 23
  • 24. 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 24
  • 26. 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 26
  • 27. Reporting / Contrôle qualité 27
  • 28. Et encore . . . Profiles Properties Assemblies Archetypes 28
  • 29. Sa place dans l’entreprise Apache Maven 29
  • 30. Référentiels de librairies 30 © OCTO Technology 2008
  • 32. L’intégration continue – Multi-projets 32
  • 33. Le processus de release 33
  • 34. Comment faire échouer son projet avec Maven ? Apache Maven 34
  • 35. 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 35
  • 36. 10. Passer son temps dans la console
  • 38. Initialiser un projet From scratch A l’ancienne Avec m2eclipse Depuis un modèle (archetype) En ligne de commande Avec m2eclipse 38
  • 39. Gérer les dépendances Recherche de dépendances Mvnrepository.com m2eclipse Dépendances simples Dépendances avancées Ranges Scopes Excludes Analyse des dépendances dependency:tree dependency:analyze 39
  • 40. Multi-modules Ajout de modules Dépendances entre modules Le reactor Son rôle Le plugin du même nom 40
  • 41. Héritage Héritage entre modules Mise en place d’un dependencyManagement 41
  • 42. Plugins Configuration des plugins PluginsManagement 42
  • 43. Documentation & Reporting Différents formats pour la documentation : Xdoc, APT Configuration des rapports Descripteur de site 43
  • 44. Questions ? Merci pour votre attention 44