SlideShare une entreprise Scribd logo
Mise en œuvre en entreprise
JUGL
Jeudi 5 mars 2009
Remerciements
Arnaud Héritier
OCTO Technology
Committer depuis 2004
Membre du PMC
(Project Management Committee) depuis 2005

Olivier Jacob
OCTO Technology
Utilisateur depuis 2003
Industrialisation des builds chez différents clients
Quelques patchs fournis pour bug fix ou évolutions sur les plugins

Présentation Maven au Jug de Paris, Nantes et Tours

Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

2
Philippe kernévez
OCTO Technology
Directeur Technique pkernevez@octo.com
http://www.octo.com

Maven
Utilisateur depuis 2002
Industrialisation des builds chez différents clients
Committer codehaus
Auteur du plugin FitNesse
http://mojo.codehaus.org/fitnesse-maven-plugin/

Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

3
Bibliographie
http://tinyurl.com/6r5v8p

http://tinyurl.com/5uv6lg

Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

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/

Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

5
Aujourd’hui
Pourquoi Maven ?
Maven, les concepts
Maven, ses apports en entreprise
Comment faire échouer son projet avec Maven ?
Démonstration

Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

6
Apache Maven

POURQUOI MAVEN ?

Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

7
Construction d’un war en 2002 (1/2)
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

Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

8
Construction d’un war en 2002 (2/2)
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
Oubli d’une dépendance
Oubli d’un fichier
Correction de dernière minute qui introduit une
régression…
Autres

Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

9
Une première réponse : ANT
Ecriture d’un script
Permet d’automatiser le processus
Durée du processus réduite de moitié
Le processus ne monopolise personne
• On le lance et on passe à autre chose

Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

10
Les limites de ANT
Ecrire le script, c’est long
Modifier un script, c’est
très long
Au final, le gain de temps
n’est pas évident
Mais c’est quand même plus
amusant
Il est possible de réutiliser le
script !

Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

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

Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

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

Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

13
Apache Maven

LES CONCEPTS

Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

14
L’arrivée de Maven
Convention Over Configuration
On ne scripte plus, on décrit son projet (POM)

Architecture extensible
Des plugins réutilisables et configurables évitent la multiplication
des scripts de build

Gestion des dépendances du projet (versions, partage, ..)
Référentiels d’artefacts
Dépendances déclaratives
Dépendances transitives

Amélioration de la qualité des livrables
Exécution automatique des tests unitaires
Contrôles (conventions de nommage, codage, …)
Rapports et documentations

Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

15
Les conventions
1 projet Maven = 1
artéfact (pom, jar, war,
ear, …)
1 organisation des
répertoires prédéfinie
1 descripteur standardisé
(POM)
Des cycles de construction
standardisés
Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

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="UTF8"?>
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.octo</groupId>
<artifactId>webappsample</artifactId>
<version>1.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>Simple webapp</name>
<inceptionYear>2007</inceptionYear>
<dependencies>
<dependency>

<groupId>org.springframework</grou
pId>
<artifactId>springstruts</artifactId>
<version>2.0.2</version>
</dependency>
...
</dependencies>
Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique
</project>

17
Cycle de vie et plugins

Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

18
Les référentiels 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

Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

19
Les dépendances
Sans Maven

Avec Maven

Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

20
Les dépendances
Déclaratives
groupId + artifactId + version (+ classifier)
Type (packaging) : jar, war, pom, ear, …

Transitives
Lib A
Lib B
Lib B
Lib C
Alors Lib A
Lib C

Scopes d’utilisation
Runtime : taglibs
Provided : Servlet API, Driver SGBD, …
Compile : par défaut
Test : Junit, TestNG, DbUnit, …
System : non recommandé (emplacement physique sur disque)

Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

21
Les versions (1/2)
Le snapshot est une version particulière
d’un artéfact / projet
Indique qu’un artéfact est en cours de développement
Le numéro de version est suffixé par -SNAPSHOT
L’artéfact est écrasé à chaque nouvelle construction en local
L’artéfact est déployé avec un timestamp sur le repository central
du projet

Les versions fixes (releases)
Sans –SNAPSHOT dans leur numéro

Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

22
Les versions (2/2)
Dépendances snapshot
Politique de vérification des mises à jour
•
•
•
•

always
daily (par défaut)
interval:X (valeur personnalisée en minutes)
never

Ne peuvent pas être utilisées lors d’une release
• Maven recommande une version figée

Intervalle de versions
De … à …
Maven recherche automatiquement les nouvelles versions
A utiliser avec précaution
• Risque de non reproductibilité du build
• Risque de disfonctionnement des consommateurs
Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

23
Le reactor
pom.xml de projet 1
Construit un projet et tous ses
modules en résolvant l’ordre de <modules>
<module>moduleA</module>
leurs dépendances
Projet 1
• Module A (dépend de B)
• Module B
• Module C (dépend de A)

<module>moduleC</module>
<module>moduleB</module>
</modules>

Construira B
puis A
puis C

Les modules sont déclarés
explicitement

Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

24
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 fonctionnelle
(serviceA, serviceB, …)
Projet1

pom.xml de module Jar1
<parent>
<groupId>X.Y.Z</groupId>
<artifactId>jars</artifactId>
<version>1.0-SNAPSHOT<version>
</parent>

Jars
• Jar1
• Jar2

Wars
• War1
• …

Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

25
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

Est recommandé pour éviter
quelques bugs dans les
plugins

Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

26
Site / Documentation (1/2)
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
Tests unitaires, couverture, …
Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

27
Site / Documentation (2/2)

Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

28
Reporting / Contrôle qualité (1/3)
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

Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

29
Reporting / Contrôle qualité (2/3)
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
sources puisque je ne
commite jamais un code qui
ne build pas ☺

Reporting - Réactif
Je corrige les problèmes
une fois étudié le rapport
Les problèmes sont dans le
gestionnaire de sources

Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

30
Reporting / Contrôle qualité (3/3)

Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

31
Et encore . . .
Profiles
(Re-)définition de certaines parties du POM en fonction de profils
de build

Properties
Définition de propriétés réutilisables dans le POM

Assemblies
Définition de packaging personnalisés

Archetypes
Définition de squelettes de projets personnalisés

Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

32
Apache Maven

SES APPORTS EN ENTREPRISE

Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

33
Standardisation
Pour les équipes
Capitalisation des connaissances
Permet de facilement passer d’un projet ou module à un autre

Pour les cellules transverses
Facilite le support

Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

34
Une véritable gestion des binaires

Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

35
L’intégration continue facilitée

Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

36
Réutilisation
De configuration
Héritage de POMs

De recommandations sur les dépendances
Import de dependencyManagement

De traitements
Plugins

De librairies

Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

37
Le processus de release automatisé

Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

38
Apache Maven

COMMENT FAIRE ÉCHOUER SON PROJET AVEC MAVEN ?

Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

39
10 bonnes pratiques pour faire échouer son projet
1.
2.
3.
4.
5.
6.
7.
8.
9.

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 niveaux d’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
Confondre dependencies et dependencyManagement

Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

40
10. Passer son temps dans la console

Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

41
Apache Maven

DÉMONSTRATION

> mvn archetype:generate
> mvn clean install
> mvn site

Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

42
Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

43

Contenu connexe

Tendances

Séminaire Captronic Yocto 24 février 2015
Séminaire Captronic Yocto 24 février 2015Séminaire Captronic Yocto 24 février 2015
Séminaire Captronic Yocto 24 février 2015
Christian Charreyre
 
Apres java 8, java 9 et 10 - BreizhCamp 2018
Apres java 8, java 9 et 10 - BreizhCamp 2018Apres java 8, java 9 et 10 - BreizhCamp 2018
Apres java 8, java 9 et 10 - BreizhCamp 2018
Jean-Michel Doudoux
 
Anniversaire Paris JUG - Deja 10 ans - retour vers le futur avec JMX
Anniversaire Paris JUG -  Deja 10 ans - retour vers le futur avec JMXAnniversaire Paris JUG -  Deja 10 ans - retour vers le futur avec JMX
Anniversaire Paris JUG - Deja 10 ans - retour vers le futur avec JMX
Jean-Michel Doudoux
 
Lyon JUG 2018 - Java le changement c'est maintenant
Lyon JUG 2018 - Java le changement c'est maintenantLyon JUG 2018 - Java le changement c'est maintenant
Lyon JUG 2018 - Java le changement c'est maintenant
Jean-Michel Doudoux
 
Formation GIT gratuite par ippon 2014
Formation GIT gratuite par ippon 2014Formation GIT gratuite par ippon 2014
Formation GIT gratuite par ippon 2014
Ippon
 
Tutorial final cut pro 7 pour Memoways
Tutorial final cut pro 7 pour MemowaysTutorial final cut pro 7 pour Memoways
Tutorial final cut pro 7 pour Memoways
Ulrich Fischer
 
Maintenir du code historique - RMLL 2011
Maintenir du code historique - RMLL 2011Maintenir du code historique - RMLL 2011
Maintenir du code historique - RMLL 2011
Jean-Marc Fontaine
 
JCertif 2012 : Maven par la pratique
JCertif 2012 : Maven par la pratiqueJCertif 2012 : Maven par la pratique
JCertif 2012 : Maven par la pratique
Rossi Oddet
 
Nantes jug 2018 - Java le changement c'est maintenant
Nantes jug 2018 - Java le changement c'est maintenantNantes jug 2018 - Java le changement c'est maintenant
Nantes jug 2018 - Java le changement c'est maintenant
Jean-Michel Doudoux
 
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
 
Formation Usine Logicielle gratuite par Ippon 2014
Formation Usine Logicielle gratuite par Ippon 2014Formation Usine Logicielle gratuite par Ippon 2014
Formation Usine Logicielle gratuite par Ippon 2014
Ippon
 

Tendances (12)

Séminaire Captronic Yocto 24 février 2015
Séminaire Captronic Yocto 24 février 2015Séminaire Captronic Yocto 24 février 2015
Séminaire Captronic Yocto 24 février 2015
 
Apres java 8, java 9 et 10 - BreizhCamp 2018
Apres java 8, java 9 et 10 - BreizhCamp 2018Apres java 8, java 9 et 10 - BreizhCamp 2018
Apres java 8, java 9 et 10 - BreizhCamp 2018
 
Anniversaire Paris JUG - Deja 10 ans - retour vers le futur avec JMX
Anniversaire Paris JUG -  Deja 10 ans - retour vers le futur avec JMXAnniversaire Paris JUG -  Deja 10 ans - retour vers le futur avec JMX
Anniversaire Paris JUG - Deja 10 ans - retour vers le futur avec JMX
 
Lyon JUG 2018 - Java le changement c'est maintenant
Lyon JUG 2018 - Java le changement c'est maintenantLyon JUG 2018 - Java le changement c'est maintenant
Lyon JUG 2018 - Java le changement c'est maintenant
 
Formation GIT gratuite par ippon 2014
Formation GIT gratuite par ippon 2014Formation GIT gratuite par ippon 2014
Formation GIT gratuite par ippon 2014
 
Tutorial final cut pro 7 pour Memoways
Tutorial final cut pro 7 pour MemowaysTutorial final cut pro 7 pour Memoways
Tutorial final cut pro 7 pour Memoways
 
Maintenir du code historique - RMLL 2011
Maintenir du code historique - RMLL 2011Maintenir du code historique - RMLL 2011
Maintenir du code historique - RMLL 2011
 
JCertif 2012 : Maven par la pratique
JCertif 2012 : Maven par la pratiqueJCertif 2012 : Maven par la pratique
JCertif 2012 : Maven par la pratique
 
Sonar-Hodson-Maven
Sonar-Hodson-MavenSonar-Hodson-Maven
Sonar-Hodson-Maven
 
Nantes jug 2018 - Java le changement c'est maintenant
Nantes jug 2018 - Java le changement c'est maintenantNantes jug 2018 - Java le changement c'est maintenant
Nantes jug 2018 - Java le changement c'est maintenant
 
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
 
Formation Usine Logicielle gratuite par Ippon 2014
Formation Usine Logicielle gratuite par Ippon 2014Formation Usine Logicielle gratuite par Ippon 2014
Formation Usine Logicielle gratuite par Ippon 2014
 

En vedette

Dossier de production 1
Dossier de production 1Dossier de production 1
Dossier de production 1
Johanna Lry
 
Propositions municipales 2014 pcf fougères oct 2013
Propositions municipales 2014 pcf fougères oct 2013Propositions municipales 2014 pcf fougères oct 2013
Propositions municipales 2014 pcf fougères oct 2013
OlivierLP29
 
Vr100 133106 contabilidad-1
Vr100   133106 contabilidad-1Vr100   133106 contabilidad-1
Vr100 133106 contabilidad-1
karitosanta
 
Informatica
InformaticaInformatica
Vr100 133106 contabilidad-1
Vr100   133106 contabilidad-1Vr100   133106 contabilidad-1
Vr100 133106 contabilidad-1
karitosanta
 
Regalitos
RegalitosRegalitos
Regalitos
karitosanta
 
Vr100 -133106_contabilidad-1
Vr100  -133106_contabilidad-1Vr100  -133106_contabilidad-1
Vr100 -133106_contabilidad-1
nuryyy
 
Cambios en la accion docente ptt
Cambios en la accion docente pttCambios en la accion docente ptt
Cambios en la accion docente ptt
Giovani Pérez
 
Formations informatiques Brest
Formations informatiques BrestFormations informatiques Brest
Formations informatiques Brest
CCI Brest Formations
 
Publicate baja california
Publicate baja californiaPublicate baja california
Publicate baja california
garden92
 
newsletter de la Embajada de Suiza en Argentina
newsletter de la Embajada de Suiza en Argentinanewsletter de la Embajada de Suiza en Argentina
newsletter de la Embajada de Suiza en Argentina
susanabartz
 
1302 newsletter
1302 newsletter1302 newsletter
1302 newsletter
susanabartz
 
Nombres dothraki
Nombres dothrakiNombres dothraki
Nombres dothraki
kittyk4att
 
Teorías de aprendizaje tic
Teorías de aprendizaje ticTeorías de aprendizaje tic
Teorías de aprendizaje tic
nilzuhu
 
Dossier de production version2 ameliorée
Dossier de production version2 amelioréeDossier de production version2 ameliorée
Dossier de production version2 ameliorée
steph95000
 
Zoom sur les bibliothèques et médiathèqes Vosgiennes
Zoom sur les bibliothèques et médiathèqes VosgiennesZoom sur les bibliothèques et médiathèqes Vosgiennes
Zoom sur les bibliothèques et médiathèqes Vosgiennes
maurand
 
Formation radon sept 2013
Formation radon sept 2013Formation radon sept 2013
Formation radon sept 2013
AIBQ
 
Shin banquedefrance 11-2014
Shin banquedefrance 11-2014Shin banquedefrance 11-2014
Shin banquedefrance 11-2014
Macropru Reader
 

En vedette (20)

Dossier de production 1
Dossier de production 1Dossier de production 1
Dossier de production 1
 
Propositions municipales 2014 pcf fougères oct 2013
Propositions municipales 2014 pcf fougères oct 2013Propositions municipales 2014 pcf fougères oct 2013
Propositions municipales 2014 pcf fougères oct 2013
 
Vr100 133106 contabilidad-1
Vr100   133106 contabilidad-1Vr100   133106 contabilidad-1
Vr100 133106 contabilidad-1
 
Informatica
InformaticaInformatica
Informatica
 
Vr100 133106 contabilidad-1
Vr100   133106 contabilidad-1Vr100   133106 contabilidad-1
Vr100 133106 contabilidad-1
 
Regalitos
RegalitosRegalitos
Regalitos
 
Vr100 -133106_contabilidad-1
Vr100  -133106_contabilidad-1Vr100  -133106_contabilidad-1
Vr100 -133106_contabilidad-1
 
Cambios en la accion docente ptt
Cambios en la accion docente pttCambios en la accion docente ptt
Cambios en la accion docente ptt
 
Formations informatiques Brest
Formations informatiques BrestFormations informatiques Brest
Formations informatiques Brest
 
Publicate baja california
Publicate baja californiaPublicate baja california
Publicate baja california
 
newsletter de la Embajada de Suiza en Argentina
newsletter de la Embajada de Suiza en Argentinanewsletter de la Embajada de Suiza en Argentina
newsletter de la Embajada de Suiza en Argentina
 
1302 newsletter
1302 newsletter1302 newsletter
1302 newsletter
 
Nombres dothraki
Nombres dothrakiNombres dothraki
Nombres dothraki
 
Teorías de aprendizaje tic
Teorías de aprendizaje ticTeorías de aprendizaje tic
Teorías de aprendizaje tic
 
Dossier de production version2 ameliorée
Dossier de production version2 amelioréeDossier de production version2 ameliorée
Dossier de production version2 ameliorée
 
Zoom sur les bibliothèques et médiathèqes Vosgiennes
Zoom sur les bibliothèques et médiathèqes VosgiennesZoom sur les bibliothèques et médiathèqes Vosgiennes
Zoom sur les bibliothèques et médiathèqes Vosgiennes
 
Formation radon sept 2013
Formation radon sept 2013Formation radon sept 2013
Formation radon sept 2013
 
Shin banquedefrance 11-2014
Shin banquedefrance 11-2014Shin banquedefrance 11-2014
Shin banquedefrance 11-2014
 
Un/Une
Un/UneUn/Une
Un/Une
 
Environment
EnvironmentEnvironment
Environment
 

Similaire à Maven2 - Philippe Kernevez - March 2009

Introduction à Google Web Toolkit (GWT) - Philippe Kernevez - February 2009
Introduction à Google Web Toolkit (GWT) - Philippe Kernevez - February 2009Introduction à Google Web Toolkit (GWT) - Philippe Kernevez - February 2009
Introduction à Google Web Toolkit (GWT) - Philippe Kernevez - February 2009
JUG Lausanne
 
JUGL 2009 - Introduction Groovy/Grails
JUGL 2009 - Introduction Groovy/GrailsJUGL 2009 - Introduction Groovy/Grails
JUGL 2009 - Introduction Groovy/Grails
cyrilpicat
 
20081023 - Paris Vi Master STL TA - Initiation Maven
20081023 - Paris Vi Master STL TA - Initiation Maven20081023 - Paris Vi Master STL TA - Initiation Maven
20081023 - Paris Vi Master STL TA - Initiation Maven
Arnaud Héritier
 
Initiation aux tests fonctionnels - Philippe Kernevez - October 2009
Initiation aux tests fonctionnels - Philippe Kernevez - October 2009Initiation aux tests fonctionnels - Philippe Kernevez - October 2009
Initiation aux tests fonctionnels - Philippe Kernevez - October 2009
JUG Lausanne
 
20081008 - Tours Jug - Apache Maven
20081008  - Tours Jug - Apache Maven20081008  - Tours Jug - Apache Maven
20081008 - Tours Jug - Apache Maven
Arnaud Héritier
 
Concevoir un système Linux embarqué avec Yocto Project
Concevoir un système Linux embarqué avec Yocto ProjectConcevoir un système Linux embarqué avec Yocto Project
Concevoir un système Linux embarqué avec Yocto Project
Christian Charreyre
 
Yocto une solution robuste pour construire des applications à fort contenu ap...
Yocto une solution robuste pour construire des applications à fort contenu ap...Yocto une solution robuste pour construire des applications à fort contenu ap...
Yocto une solution robuste pour construire des applications à fort contenu ap...
Christian Charreyre
 
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
 
Présentation Maven
Présentation MavenPrésentation Maven
Présentation Maven
SOAT
 
Formation Play! framework
Formation Play! frameworkFormation Play! framework
Formation Play! framework
Benoît Simard
 
Outils de construction pour la recherche
Outils de construction pour la rechercheOutils de construction pour la recherche
Outils de construction pour la recherche
Johan Moreau
 
Créer sa distribution Linux embarqué avec Yocto ou Angström
Créer sa distribution Linux embarqué avec Yocto ou AngströmCréer sa distribution Linux embarqué avec Yocto ou Angström
Créer sa distribution Linux embarqué avec Yocto ou Angström
Christian Charreyre
 
Quoi de neuf dans la version 11 Alexandria ?
Quoi de neuf dans la version 11 Alexandria ?Quoi de neuf dans la version 11 Alexandria ?
Quoi de neuf dans la version 11 Alexandria ?
pprem
 
Strategie de Virtualisation Open Source
Strategie de Virtualisation Open SourceStrategie de Virtualisation Open Source
Strategie de Virtualisation Open Source
Open Source School
 
Conference Informatique Embarquée Synergie-NTIC
Conference Informatique Embarquée Synergie-NTICConference Informatique Embarquée Synergie-NTIC
Conference Informatique Embarquée Synergie-NTIC
Christian Charreyre
 
Rex docker en production meeutp-docker-nantes
Rex docker en production meeutp-docker-nantesRex docker en production meeutp-docker-nantes
Rex docker en production meeutp-docker-nantes
Christophe Furmaniak
 
Introduction à web assembly
Introduction à web assemblyIntroduction à web assembly
Introduction à web assembly
Jérémy Buget
 
La Duck Conf - DevOps et Dataviz, un amour impossible ?
La Duck Conf - DevOps et Dataviz, un amour impossible ? La Duck Conf - DevOps et Dataviz, un amour impossible ?
La Duck Conf - DevOps et Dataviz, un amour impossible ?
OCTO Technology
 
GWT no-dto
GWT no-dtoGWT no-dto
GWT no-dto
François Wauquier
 
At2008 Grenoble Hugonnet Sanlaville Public
At2008 Grenoble Hugonnet Sanlaville PublicAt2008 Grenoble Hugonnet Sanlaville Public
At2008 Grenoble Hugonnet Sanlaville Public
Emmanuel Hugonnet
 

Similaire à Maven2 - Philippe Kernevez - March 2009 (20)

Introduction à Google Web Toolkit (GWT) - Philippe Kernevez - February 2009
Introduction à Google Web Toolkit (GWT) - Philippe Kernevez - February 2009Introduction à Google Web Toolkit (GWT) - Philippe Kernevez - February 2009
Introduction à Google Web Toolkit (GWT) - Philippe Kernevez - February 2009
 
JUGL 2009 - Introduction Groovy/Grails
JUGL 2009 - Introduction Groovy/GrailsJUGL 2009 - Introduction Groovy/Grails
JUGL 2009 - Introduction Groovy/Grails
 
20081023 - Paris Vi Master STL TA - Initiation Maven
20081023 - Paris Vi Master STL TA - Initiation Maven20081023 - Paris Vi Master STL TA - Initiation Maven
20081023 - Paris Vi Master STL TA - Initiation Maven
 
Initiation aux tests fonctionnels - Philippe Kernevez - October 2009
Initiation aux tests fonctionnels - Philippe Kernevez - October 2009Initiation aux tests fonctionnels - Philippe Kernevez - October 2009
Initiation aux tests fonctionnels - Philippe Kernevez - October 2009
 
20081008 - Tours Jug - Apache Maven
20081008  - Tours Jug - Apache Maven20081008  - Tours Jug - Apache Maven
20081008 - Tours Jug - Apache Maven
 
Concevoir un système Linux embarqué avec Yocto Project
Concevoir un système Linux embarqué avec Yocto ProjectConcevoir un système Linux embarqué avec Yocto Project
Concevoir un système Linux embarqué avec Yocto Project
 
Yocto une solution robuste pour construire des applications à fort contenu ap...
Yocto une solution robuste pour construire des applications à fort contenu ap...Yocto une solution robuste pour construire des applications à fort contenu ap...
Yocto une solution robuste pour construire des applications à fort contenu ap...
 
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
 
Présentation Maven
Présentation MavenPrésentation Maven
Présentation Maven
 
Formation Play! framework
Formation Play! frameworkFormation Play! framework
Formation Play! framework
 
Outils de construction pour la recherche
Outils de construction pour la rechercheOutils de construction pour la recherche
Outils de construction pour la recherche
 
Créer sa distribution Linux embarqué avec Yocto ou Angström
Créer sa distribution Linux embarqué avec Yocto ou AngströmCréer sa distribution Linux embarqué avec Yocto ou Angström
Créer sa distribution Linux embarqué avec Yocto ou Angström
 
Quoi de neuf dans la version 11 Alexandria ?
Quoi de neuf dans la version 11 Alexandria ?Quoi de neuf dans la version 11 Alexandria ?
Quoi de neuf dans la version 11 Alexandria ?
 
Strategie de Virtualisation Open Source
Strategie de Virtualisation Open SourceStrategie de Virtualisation Open Source
Strategie de Virtualisation Open Source
 
Conference Informatique Embarquée Synergie-NTIC
Conference Informatique Embarquée Synergie-NTICConference Informatique Embarquée Synergie-NTIC
Conference Informatique Embarquée Synergie-NTIC
 
Rex docker en production meeutp-docker-nantes
Rex docker en production meeutp-docker-nantesRex docker en production meeutp-docker-nantes
Rex docker en production meeutp-docker-nantes
 
Introduction à web assembly
Introduction à web assemblyIntroduction à web assembly
Introduction à web assembly
 
La Duck Conf - DevOps et Dataviz, un amour impossible ?
La Duck Conf - DevOps et Dataviz, un amour impossible ? La Duck Conf - DevOps et Dataviz, un amour impossible ?
La Duck Conf - DevOps et Dataviz, un amour impossible ?
 
GWT no-dto
GWT no-dtoGWT no-dto
GWT no-dto
 
At2008 Grenoble Hugonnet Sanlaville Public
At2008 Grenoble Hugonnet Sanlaville PublicAt2008 Grenoble Hugonnet Sanlaville Public
At2008 Grenoble Hugonnet Sanlaville Public
 

Plus de JUG Lausanne

Introduction aux algorithmes génétiques
Introduction aux algorithmes génétiquesIntroduction aux algorithmes génétiques
Introduction aux algorithmes génétiques
JUG Lausanne
 
Développer un moteur d'exécution symbolique en partant de rien
Développer un moteur d'exécution symbolique en partant de rienDévelopper un moteur d'exécution symbolique en partant de rien
Développer un moteur d'exécution symbolique en partant de rien
JUG Lausanne
 
Reverse engineering Java et contournement du mécanisme de paiement inapp Android
Reverse engineering Java et contournement du mécanisme de paiement inapp AndroidReverse engineering Java et contournement du mécanisme de paiement inapp Android
Reverse engineering Java et contournement du mécanisme de paiement inapp Android
JUG Lausanne
 
Exemple d'IOT et ML avec Android, Cassandra et Spark
Exemple d'IOT et ML avec Android, Cassandra et SparkExemple d'IOT et ML avec Android, Cassandra et Spark
Exemple d'IOT et ML avec Android, Cassandra et Spark
JUG Lausanne
 
Play! chez Zaptravel - Nicolas Martignole - December 2012
Play! chez Zaptravel - Nicolas Martignole - December 2012Play! chez Zaptravel - Nicolas Martignole - December 2012
Play! chez Zaptravel - Nicolas Martignole - December 2012
JUG Lausanne
 
Playframework Realtime Web - Guillaume Bort & Sadek Drobi - December 2012
Playframework Realtime Web - Guillaume Bort & Sadek Drobi - December 2012Playframework Realtime Web - Guillaume Bort & Sadek Drobi - December 2012
Playframework Realtime Web - Guillaume Bort & Sadek Drobi - December 2012
JUG Lausanne
 
CloudBees - Sacha Labourey - May 2011
CloudBees - Sacha Labourey - May 2011CloudBees - Sacha Labourey - May 2011
CloudBees - Sacha Labourey - May 2011
JUG Lausanne
 
Apache Camel - Stéphane Kay - April 2011
Apache Camel - Stéphane Kay - April 2011Apache Camel - Stéphane Kay - April 2011
Apache Camel - Stéphane Kay - April 2011
JUG Lausanne
 
Session dédiée à l'analyse de la qualité du code Java - Cyril Picat - Februar...
Session dédiée à l'analyse de la qualité du code Java - Cyril Picat - Februar...Session dédiée à l'analyse de la qualité du code Java - Cyril Picat - Februar...
Session dédiée à l'analyse de la qualité du code Java - Cyril Picat - Februar...
JUG Lausanne
 
OpenDS - Ludovic Poitou - December 2010
OpenDS - Ludovic Poitou - December 2010OpenDS - Ludovic Poitou - December 2010
OpenDS - Ludovic Poitou - December 2010
JUG Lausanne
 
Spring Batch - Julien Jakubowski - November 2010
Spring Batch - Julien Jakubowski - November 2010Spring Batch - Julien Jakubowski - November 2010
Spring Batch - Julien Jakubowski - November 2010
JUG Lausanne
 
Infinispan - Galder Zamarreno - October 2010
Infinispan - Galder Zamarreno - October 2010Infinispan - Galder Zamarreno - October 2010
Infinispan - Galder Zamarreno - October 2010
JUG Lausanne
 
No Sql - Olivier Mallassi - September 2010
No Sql - Olivier Mallassi - September 2010No Sql - Olivier Mallassi - September 2010
No Sql - Olivier Mallassi - September 2010
JUG Lausanne
 
Java EE 6 & GlassFish V3 - Alexis Moussine-Pouchkine - May 2010
Java EE 6 & GlassFish V3 - Alexis Moussine-Pouchkine - May 2010Java EE 6 & GlassFish V3 - Alexis Moussine-Pouchkine - May 2010
Java EE 6 & GlassFish V3 - Alexis Moussine-Pouchkine - May 2010
JUG Lausanne
 
Introduction à Scala - Michel Schinz - January 2010
Introduction à Scala - Michel Schinz - January 2010Introduction à Scala - Michel Schinz - January 2010
Introduction à Scala - Michel Schinz - January 2010
JUG Lausanne
 
Sonar - Freddy Mallet - April 2009
Sonar - Freddy Mallet - April 2009Sonar - Freddy Mallet - April 2009
Sonar - Freddy Mallet - April 2009
JUG Lausanne
 
XML & Java - Raphaël Tagliani - March 2008
XML & Java - Raphaël Tagliani - March 2008XML & Java - Raphaël Tagliani - March 2008
XML & Java - Raphaël Tagliani - March 2008
JUG Lausanne
 
Visual Mobile Applications with Netbeans 6.0 - Cédric Tabin - February 2008
Visual Mobile Applications with Netbeans 6.0 - Cédric Tabin - February 2008Visual Mobile Applications with Netbeans 6.0 - Cédric Tabin - February 2008
Visual Mobile Applications with Netbeans 6.0 - Cédric Tabin - February 2008
JUG Lausanne
 
Scripting with Java FX - Cédric Tabin - December 2007
Scripting with Java FX - Cédric Tabin - December 2007Scripting with Java FX - Cédric Tabin - December 2007
Scripting with Java FX - Cédric Tabin - December 2007
JUG Lausanne
 
GlassFish Update and Directions - Karim Mazouni - November 2007
GlassFish Update and Directions - Karim Mazouni - November 2007GlassFish Update and Directions - Karim Mazouni - November 2007
GlassFish Update and Directions - Karim Mazouni - November 2007
JUG Lausanne
 

Plus de JUG Lausanne (20)

Introduction aux algorithmes génétiques
Introduction aux algorithmes génétiquesIntroduction aux algorithmes génétiques
Introduction aux algorithmes génétiques
 
Développer un moteur d'exécution symbolique en partant de rien
Développer un moteur d'exécution symbolique en partant de rienDévelopper un moteur d'exécution symbolique en partant de rien
Développer un moteur d'exécution symbolique en partant de rien
 
Reverse engineering Java et contournement du mécanisme de paiement inapp Android
Reverse engineering Java et contournement du mécanisme de paiement inapp AndroidReverse engineering Java et contournement du mécanisme de paiement inapp Android
Reverse engineering Java et contournement du mécanisme de paiement inapp Android
 
Exemple d'IOT et ML avec Android, Cassandra et Spark
Exemple d'IOT et ML avec Android, Cassandra et SparkExemple d'IOT et ML avec Android, Cassandra et Spark
Exemple d'IOT et ML avec Android, Cassandra et Spark
 
Play! chez Zaptravel - Nicolas Martignole - December 2012
Play! chez Zaptravel - Nicolas Martignole - December 2012Play! chez Zaptravel - Nicolas Martignole - December 2012
Play! chez Zaptravel - Nicolas Martignole - December 2012
 
Playframework Realtime Web - Guillaume Bort & Sadek Drobi - December 2012
Playframework Realtime Web - Guillaume Bort & Sadek Drobi - December 2012Playframework Realtime Web - Guillaume Bort & Sadek Drobi - December 2012
Playframework Realtime Web - Guillaume Bort & Sadek Drobi - December 2012
 
CloudBees - Sacha Labourey - May 2011
CloudBees - Sacha Labourey - May 2011CloudBees - Sacha Labourey - May 2011
CloudBees - Sacha Labourey - May 2011
 
Apache Camel - Stéphane Kay - April 2011
Apache Camel - Stéphane Kay - April 2011Apache Camel - Stéphane Kay - April 2011
Apache Camel - Stéphane Kay - April 2011
 
Session dédiée à l'analyse de la qualité du code Java - Cyril Picat - Februar...
Session dédiée à l'analyse de la qualité du code Java - Cyril Picat - Februar...Session dédiée à l'analyse de la qualité du code Java - Cyril Picat - Februar...
Session dédiée à l'analyse de la qualité du code Java - Cyril Picat - Februar...
 
OpenDS - Ludovic Poitou - December 2010
OpenDS - Ludovic Poitou - December 2010OpenDS - Ludovic Poitou - December 2010
OpenDS - Ludovic Poitou - December 2010
 
Spring Batch - Julien Jakubowski - November 2010
Spring Batch - Julien Jakubowski - November 2010Spring Batch - Julien Jakubowski - November 2010
Spring Batch - Julien Jakubowski - November 2010
 
Infinispan - Galder Zamarreno - October 2010
Infinispan - Galder Zamarreno - October 2010Infinispan - Galder Zamarreno - October 2010
Infinispan - Galder Zamarreno - October 2010
 
No Sql - Olivier Mallassi - September 2010
No Sql - Olivier Mallassi - September 2010No Sql - Olivier Mallassi - September 2010
No Sql - Olivier Mallassi - September 2010
 
Java EE 6 & GlassFish V3 - Alexis Moussine-Pouchkine - May 2010
Java EE 6 & GlassFish V3 - Alexis Moussine-Pouchkine - May 2010Java EE 6 & GlassFish V3 - Alexis Moussine-Pouchkine - May 2010
Java EE 6 & GlassFish V3 - Alexis Moussine-Pouchkine - May 2010
 
Introduction à Scala - Michel Schinz - January 2010
Introduction à Scala - Michel Schinz - January 2010Introduction à Scala - Michel Schinz - January 2010
Introduction à Scala - Michel Schinz - January 2010
 
Sonar - Freddy Mallet - April 2009
Sonar - Freddy Mallet - April 2009Sonar - Freddy Mallet - April 2009
Sonar - Freddy Mallet - April 2009
 
XML & Java - Raphaël Tagliani - March 2008
XML & Java - Raphaël Tagliani - March 2008XML & Java - Raphaël Tagliani - March 2008
XML & Java - Raphaël Tagliani - March 2008
 
Visual Mobile Applications with Netbeans 6.0 - Cédric Tabin - February 2008
Visual Mobile Applications with Netbeans 6.0 - Cédric Tabin - February 2008Visual Mobile Applications with Netbeans 6.0 - Cédric Tabin - February 2008
Visual Mobile Applications with Netbeans 6.0 - Cédric Tabin - February 2008
 
Scripting with Java FX - Cédric Tabin - December 2007
Scripting with Java FX - Cédric Tabin - December 2007Scripting with Java FX - Cédric Tabin - December 2007
Scripting with Java FX - Cédric Tabin - December 2007
 
GlassFish Update and Directions - Karim Mazouni - November 2007
GlassFish Update and Directions - Karim Mazouni - November 2007GlassFish Update and Directions - Karim Mazouni - November 2007
GlassFish Update and Directions - Karim Mazouni - November 2007
 

Maven2 - Philippe Kernevez - March 2009

  • 1. Mise en œuvre en entreprise JUGL Jeudi 5 mars 2009
  • 2. Remerciements Arnaud Héritier OCTO Technology Committer depuis 2004 Membre du PMC (Project Management Committee) depuis 2005 Olivier Jacob OCTO Technology Utilisateur depuis 2003 Industrialisation des builds chez différents clients Quelques patchs fournis pour bug fix ou évolutions sur les plugins Présentation Maven au Jug de Paris, Nantes et Tours Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique 2
  • 3. Philippe kernévez OCTO Technology Directeur Technique pkernevez@octo.com http://www.octo.com Maven Utilisateur depuis 2002 Industrialisation des builds chez différents clients Committer codehaus Auteur du plugin FitNesse http://mojo.codehaus.org/fitnesse-maven-plugin/ Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique 3
  • 4. Bibliographie http://tinyurl.com/6r5v8p http://tinyurl.com/5uv6lg Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique 4
  • 5. 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/ Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique 5
  • 6. Aujourd’hui Pourquoi Maven ? Maven, les concepts Maven, ses apports en entreprise Comment faire échouer son projet avec Maven ? Démonstration Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique 6
  • 7. Apache Maven POURQUOI MAVEN ? Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique 7
  • 8. Construction d’un war en 2002 (1/2) 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 Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique 8
  • 9. Construction d’un war en 2002 (2/2) 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 Oubli d’une dépendance Oubli d’un fichier Correction de dernière minute qui introduit une régression… Autres Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique 9
  • 10. Une première réponse : ANT Ecriture d’un script Permet d’automatiser le processus Durée du processus réduite de moitié Le processus ne monopolise personne • On le lance et on passe à autre chose Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique 10
  • 11. Les limites de ANT Ecrire le script, c’est long Modifier un script, c’est très long Au final, le gain de temps n’est pas évident Mais c’est quand même plus amusant Il est possible de réutiliser le script ! Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique 11
  • 12. 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 Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique 12
  • 13. 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 Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique 13
  • 14. Apache Maven LES CONCEPTS Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique 14
  • 15. L’arrivée de Maven Convention Over Configuration On ne scripte plus, on décrit son projet (POM) Architecture extensible Des plugins réutilisables et configurables évitent la multiplication des scripts de build Gestion des dépendances du projet (versions, partage, ..) Référentiels d’artefacts Dépendances déclaratives Dépendances transitives Amélioration de la qualité des livrables Exécution automatique des tests unitaires Contrôles (conventions de nommage, codage, …) Rapports et documentations Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique 15
  • 16. Les conventions 1 projet Maven = 1 artéfact (pom, jar, war, ear, …) 1 organisation des répertoires prédéfinie 1 descripteur standardisé (POM) Des cycles de construction standardisés Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique 16
  • 17. 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="UTF8"?> <project> <modelVersion>4.0.0</modelVersion> <groupId>com.octo</groupId> <artifactId>webappsample</artifactId> <version>1.1-SNAPSHOT</version> <packaging>war</packaging> <name>Simple webapp</name> <inceptionYear>2007</inceptionYear> <dependencies> <dependency> <groupId>org.springframework</grou pId> <artifactId>springstruts</artifactId> <version>2.0.2</version> </dependency> ... </dependencies> Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique </project> 17
  • 18. Cycle de vie et plugins Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique 18
  • 19. Les référentiels 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 Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique 19
  • 20. Les dépendances Sans Maven Avec Maven Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique 20
  • 21. Les dépendances Déclaratives groupId + artifactId + version (+ classifier) Type (packaging) : jar, war, pom, ear, … Transitives Lib A Lib B Lib B Lib C Alors Lib A Lib C Scopes d’utilisation Runtime : taglibs Provided : Servlet API, Driver SGBD, … Compile : par défaut Test : Junit, TestNG, DbUnit, … System : non recommandé (emplacement physique sur disque) Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique 21
  • 22. Les versions (1/2) Le snapshot est une version particulière d’un artéfact / projet Indique qu’un artéfact est en cours de développement Le numéro de version est suffixé par -SNAPSHOT L’artéfact est écrasé à chaque nouvelle construction en local L’artéfact est déployé avec un timestamp sur le repository central du projet Les versions fixes (releases) Sans –SNAPSHOT dans leur numéro Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique 22
  • 23. Les versions (2/2) Dépendances snapshot Politique de vérification des mises à jour • • • • always daily (par défaut) interval:X (valeur personnalisée en minutes) never Ne peuvent pas être utilisées lors d’une release • Maven recommande une version figée Intervalle de versions De … à … Maven recherche automatiquement les nouvelles versions A utiliser avec précaution • Risque de non reproductibilité du build • Risque de disfonctionnement des consommateurs Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique 23
  • 24. Le reactor pom.xml de projet 1 Construit un projet et tous ses modules en résolvant l’ordre de <modules> <module>moduleA</module> leurs dépendances Projet 1 • Module A (dépend de B) • Module B • Module C (dépend de A) <module>moduleC</module> <module>moduleB</module> </modules> Construira B puis A puis C Les modules sont déclarés explicitement Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique 24
  • 25. 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 fonctionnelle (serviceA, serviceB, …) Projet1 pom.xml de module Jar1 <parent> <groupId>X.Y.Z</groupId> <artifactId>jars</artifactId> <version>1.0-SNAPSHOT<version> </parent> Jars • Jar1 • Jar2 Wars • War1 • … Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique 25
  • 26. 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 Est recommandé pour éviter quelques bugs dans les plugins Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique 26
  • 27. Site / Documentation (1/2) 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 Tests unitaires, couverture, … Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique 27
  • 28. Site / Documentation (2/2) Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique 28
  • 29. Reporting / Contrôle qualité (1/3) 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 Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique 29
  • 30. Reporting / Contrôle qualité (2/3) 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 sources puisque je ne commite jamais un code qui ne build pas ☺ Reporting - Réactif Je corrige les problèmes une fois étudié le rapport Les problèmes sont dans le gestionnaire de sources Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique 30
  • 31. Reporting / Contrôle qualité (3/3) Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique 31
  • 32. Et encore . . . Profiles (Re-)définition de certaines parties du POM en fonction de profils de build Properties Définition de propriétés réutilisables dans le POM Assemblies Définition de packaging personnalisés Archetypes Définition de squelettes de projets personnalisés Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique 32
  • 33. Apache Maven SES APPORTS EN ENTREPRISE Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique 33
  • 34. Standardisation Pour les équipes Capitalisation des connaissances Permet de facilement passer d’un projet ou module à un autre Pour les cellules transverses Facilite le support Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique 34
  • 35. Une véritable gestion des binaires Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique 35
  • 36. L’intégration continue facilitée Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique 36
  • 37. Réutilisation De configuration Héritage de POMs De recommandations sur les dépendances Import de dependencyManagement De traitements Plugins De librairies Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique 37
  • 38. Le processus de release automatisé Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique 38
  • 39. Apache Maven COMMENT FAIRE ÉCHOUER SON PROJET AVEC MAVEN ? Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique 39
  • 40. 10 bonnes pratiques pour faire échouer son projet 1. 2. 3. 4. 5. 6. 7. 8. 9. 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 niveaux d’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 Confondre dependencies et dependencyManagement Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique 40
  • 41. 10. Passer son temps dans la console Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique 41
  • 42. Apache Maven DÉMONSTRATION > mvn archetype:generate > mvn clean install > mvn site Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique 42
  • 43. Copyright © 2009 – OCTO Technology – Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique 43