20081008 - Tours Jug - Apache Maven

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    Favorites, Groups & Events

    20081008 - Tours Jug - Apache Maven - Presentation Transcript

    1. Apache Maven
      Mise en œuvre en entreprise
      Java User Group - Tours
      Mercredi 08 Octobre 2008
    2. Arnaud Héritier
      OCTO Technology
      Expert sénior
      aheritier AT octo DOT com
      http://www.octo.com
      Maven
      Développeur (committer) depuis 2004
      Membre du conseil de gestion du projet (Project Management Committee) depuis 2005
      aheritier AT apache DOT org
      http://maven.apache.org
      2
    3. Benoit Lafontaine
      OCTO Technology
      Architecte sénior
      Responsable du Centre de Compétences Java
      blafontaine AT octo DOT com
      http://www.octo.com
      Maven
      Utilisateur de Maven 2 depuis 2006
      3
    4. Ce soir
      Pourquoi Maven ?
      Maven, les concepts
      Maven dans l’entreprise
      Comment faire échouer son projet avec Maven ?
      4
    5. Pourquoi Maven ?
      Apache Maven
      5
    6. Construction d’un war en 2002
      Construire un war
      Utilisation d’Eclipse limitée
      En ces temps reculés où WTP n’existait pas (uniquement dans la version payante d’IBM), eclipse ne permettait pas d’exporter des Wars
      Gestion manuelle
      Modifier les fichiers de paramétrage
      Exporter les différents jar
      Copier les dépendances (et nos jars), dans un répertoire lib
      Faire un zip que l’on renomme en war
      Tagguer l’ensemble des sources dans le répertoire de sources (CVS)
      Envoi du fichier par FTP sur le serveur d’intégration
      Se connecter à la console d’administration du serveur et déployer l’application
    7. Construction d’un war en 2002
      Combien de temps ça prend ?
      Quand tout va bien :
      15 minutes
      Quand il y a des problèmes :
      ½ journée
      Un seul problème, Y’a toujours des problèmes
      Erreur dans la configuration
      Oublie d’une dépendance
      Oublie d’un fichier
      Correction de dernière minute qui introduit une régression…
      Autres
    8. Une première réponse : ANT
      Ecriture d’un script
      Permet d’automatiser le process
      Durée réduite du processus réduite de moitiée
      Le processus ne monopolise personne
      On le lance et on passe à autre chose
    9. Les limites de ANT
      Ecrire le script, c’est long
      Modifier un script, c’est très long
      Au final, le gains de temps n’est pas évident
      Mais c’est quand même plus amusant
      Il est possible de réutiliser le script !
    10. La réutilisation de scripts ANT
      Les scripts ne sont pas directement réutilisables
      Structure de projets différents
      Besoins différents
      Encore du temps perdu
      Modification du script
      Réécriture pour le rendre plus générique
       Un nouveau métier s’est créé : scripteur ANT
    11. Quelques exemples
      http://anonsvn.jboss.org/repos/seam/branches/community/Seam_2_0
      http://junit.cvs.sourceforge.net/viewvc/junit/junit/build.xml?view=markup
      http://findbugs.googlecode.com/svn/trunk/findbugs/build.xml
    12. Les CONCEPTS
      Apache Maven
      12
    13. L’arrivée de Maven
      Convention Over Configuration
      On ne script plus, on décrit son projet (POM)
      Architecture extensible
      Des plugins réutilisables évitent la multiplication des scripts de build
      Gestion des librairies du projet (versions, partage, ..)
      Référentiels de librairies
      Dépendances déclaratives
      Dépendances transitives
      Amélioration de la qualité des livrables
      Contrôles
      Rapports
    14. Les conventions
      1 projet Maven = 1 artéfact (pom, jar, war, ear, …)
      1 organisation des répertoires prédéfinie
      1 descripteur standardisé
      14
    15. Le POM
      Un fichier XML (pom.xml)
      Décrivant :
      Identification du projet
      Version du projet
      Description du projet
      Liste des développeurs
      Dépendances

      <?xml version="1.0" encoding="UTF-8"?>
      <project>
      <modelVersion>4.0.0</modelVersion>
      <groupId>com.octo</groupId>
      <artifactId>webapp-sample</artifactId>
      <version>1.1-SNAPSHOT</version>
      <packaging>war</packaging>
      <name>Simple webapp</name>
      <inceptionYear>2007</inceptionYear>
      <dependencies>
      <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-struts</artifactId>
      <version>2.0.2</version>
      </dependency>

      </dependencies>
      </project>
      15
    16. Les dépendances
      Déclaratives
      groupId + artifactId + version (+ classifier)
      Transitives
      Lib A  Lib B
      Lib B  Lib C
      Alors Lib A  Lib C
      Scopes d’utilisation
      Runtime : Taglibs
      Provided : API Servlet, Driver SGBD, …
      Compile : par défaut
      Test : Junit, DBUnit…
      System : non recommandé
      Import : Pour charger le dependencyManagement d’un autre pom.
      16
    17. Sans Maven
      Avec Maven
      17
      Les dépendances
    18. Les référentiels de d’artéfacts
      Par défaut :
      Un central
      http://repo1.maven.org/maven2
      Propose plusieurs dizaines de Go de librairies OSS.
      Un local
      ${user.home}/.m2/repository
      Centralise toutes les artéfacts utilisés et créés par vos projets
      18
    19. Le reactor
      Construit un projet et tous ces modules en résolvant l’ordre de leurs dépendances
      Projet 1
      Module A (dépend de B)
      Module B
      Module C (dépend de A)
       Construira B
      puis A
      puis C
      pom.xml de projet 1
      <modules>
      <module>moduleA</module>
      <module>moduleC</module>
      <module>moduleB</module>
      </modules>
      19
    20. L’héritage
      Factorisation de paramètres entre projets/modules
      L’organisation des sous modules et de l’héritage doit être technique (ejbs, wars, jars) et non pas fonctionnel (serviceA, serviceB, …)
      Projet1
      Jars
      Jar1
      Jar2
      Wars
      War1

      pom.xml de module Jar1
      <parent>
      <groupId>X.Y.Z</groupId>
      <artifactId>jars</artifactId>
      <version>1.0-SNAPSHOT</version>
      </parent>
      20
    21. L’héritage naturel
      Lorsque le parent sert aussi de reactor
      A condition que nom du module = son artifactId
      Evite la re-définition de certains éléments du pom :
      Url du site
      Déploiement du site
      Informations SCMs
      21
    22. Site / Documentation
      Génération d’un site documentaire à partir de documents dans différents formats :
      Xdocs (xml)
      Apt (wiki)
      Docbook
      ….
      Génération de rapports sur le projet
      Descriptif
      Informations sur les dépendances
      Documentation automatique des plugins maven
      Javadoc
      Xref
      22
    23. Site / Documentation
      23
    24. Reporting / Contrôle qualité
      Reporting - Réactif
      Je corrige les problèmes une fois étudié le rapport
      Les problèmes sont dans le gestionnaire de versions
      Contrôle - Pro-actif
      Le build échoue si mon code ne respecte pas certaines règles
      Les problèmes ne sont pas dans le gestionnaire de versions puisque je ne commit jamais un code qui ne build pas
      Types de contrôles / reporting
      Résultat de l’exécution des tests : surefire
      Couverture de tests : clover, cobertura
      Qualité du code : findbugs
      Conformité aux standards : checkstyle
      Patterns / Antipatterns : pmd
      24
    25. Reporting / Contrôle qualité
      25
    26. Cycle de vie et plugins
      26
    27. Dans l’entreprise
      Apache Maven
      27
    28. BuildLocal
      BuildLocal
      BuildLocal
      Build
      Référentiel
      binaires
      Serveur
      d’intégration
      continue
      Doumentation
      & Métriques
      Build
      Récupérer
      les dépendances
      Compiler
      Vérifier les règles de codage
      Exécuter les tests
      Gestionnaire
      de sources
      Packager
      Déployer
      Plateforme
      démonstration
      Documenter
      L’intégration continue
      Notifications
    29. L’intégration continue
      29
      Automated Tasks
      Deploy
      Application onIntegration
      environment
      ManualTasks
      Merge all changes
      ManualTasks
      Get last versionof project 1
      Package
      Make binaries
      Available on acentralized place
      Commit changeson SCM
      Test
      Develop
      Develop
      Project 2
      Project 1
    30. Référentiels de librairies
      30
      © OCTO Technology 2008
    31. Le processus de release
      31
      Verify that projectdoesn’t depend of“SNAPSHOT” dependencies
      VerifyUnit Tests(and coding rules)
      Compile
      Code
      Change projectdescriptor to specifyreleased version
      Verify there’sno more local changes
      Commitchange
      Tag sourcesin SCM
      Checkout tagged
      sources to be sureof the final binary
      Verifyunit testsand coding rules
      Compile
      Code
      Deploy binary
      on centralized repository
      Package
      Binary
      Change projectdescriptor to specifynew current version
      Commitchange
      Generateand DeployDocumentation
    32. Comment faire échouer son projet avec Maven ?
      Apache Maven
      32
    33. 10 bonnes pratiques pour faire échouer son projet
      Ne pas utiliser les conventions
      Mettre tout ce qui est possible de mettre dans le pom
      Se rendre dépendant de l’environnement
      Multiplier les niveauxd’héritage
      Utiliser systématiquement "-Dmaven.test.skip=true »
      Faire les releases à la main
      S’échanger les jars par mail
      Utilisation massive du plugin antrun
      Essayer de définir les dépendances pour les autres
      33
    34. 10. Passer son temps dans la console
    35. Licence
      Creative Commons
      Contrat Paternité
      Pas d'Utilisation Commerciale
      Partage des Conditions Initiales à l'Identique
      2.0 France
      http://creativecommons.org/licenses/by-nc-sa/2.0/fr/
      35
    36. Questions ?
      36
    37. Buffet
      Merci pour votre attention
      37
    SlideShare Zeitgeist 2009

    + Arnaud HéritierArnaud Héritier Nominate

    custom

    69 views, 0 favs, 0 embeds more stats

    Session Tours JUG en duo avec Benoît Lafontaine (O more

    More info about this document

    © All Rights Reserved

    Go to text version

    • Total Views 69
      • 69 on SlideShare
      • 0 from embeds
    • Comments 0
    • Favorites 0
    • Downloads 1
    Most viewed embeds

    more

    All embeds

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as inappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel
    File a copyright complaint
    Having problems? Go to our helpdesk?

    Tags