jcertif 2012 : maven par la pratique

87
Maven par la pratique

Upload: rossi-oddet

Post on 11-Jul-2015

1.360 views

Category:

Technology


0 download

TRANSCRIPT

  • Maven par la pratique

  • Qui suis-je ?

    Rossi OddetConsultant IT chez SQLI

    Manager JCertif Lab

    Twitter : @rossioddetBlog: http://blog.roddet.com

    2

  • Maven cest quoi ?

    3

  • 4Votre outil de gestion de projet !

  • 5Que peut-on concrtement faire avec ?

  • Quelques services rendus votre projet

    6

    Crez ! laide de modles

    Compilez ! Grer les dpendances, la version du JDK, ...

    Assemblez ! JAR, WAR, EAR, ZIP, ...

    Archivez ! dans un dpt local ou distantVersionnez !

    Grer les versions de votre projet

    Testez ! Excutez des tests unitaires, dintgrations, ...

    Versionnez !Grer les versions de votre projet

    Dployez ! dans un serveur dapplication local, distant, ...Reportez !

    Gnrer/envoyer divers rapports

    Qualifiez ! Vrifier la qualit de vos projets

  • Maven, toute une philosophie

    7

    convention plutt que configuration

    standard plutt quoutil

    mme modle pour tous les projets

    mvn install pour tout le monde

  • Installer Maven

    8

    Rendez-vous la page de tlchargement : http://maven.apache.org/download.html

    Dcompressez dans le rpertoire de votre choix le fichier apache-maven-3.0.4-bin.zip

    Mettre le rpertoire [MAVEN_INSTALL]/bin dans la variable Path Excutez la commande : mvn -version

  • Le fichier settings.xml

    9

    Unique fichier XML de configuration

    convention plutt que configuration

  • La carte didentit dun projet

    10

    groupId : com.jcertif

    Rpublique de

    artifactId : projet-simpleversion : 1.0.0

    packaging : jar

  • Larchivage dun projet

    11

    / / / / -.

    Par exemple :.m2/repository/com/jcertif/projet-simple/1.0.0/mon-projet-simple-1.0.0.jar

  • La structure par dfaut dun projet

    12

    mon-projet/pom.xml

    /src /main

    /java /resources /webapp

    /test /java /resources

    /target

  • TP 1 : Crer un projet simple

    13

    mvn archetype:generate -DgroupId=com.jcertif -DartifactId=projet-simple -Dversion=1.0.0 -DinteractiveMode=false

  • Les fichiers gnrs

    14

    projet-simple /pom.xml

    /src /main

    /java /com

    /jcertif /App.java

    /test /java /com /jcertif /AppTest.java

  • Fichier pom.xml pour configurer votre projet

    15

  • Classe App.java

    16

  • Classe AppTest.java

    17

    pom.xml

  • Construisez votre projet

    Se positionner dans le rpertoire mon-projet-simple Excutez la commande : mvn install

    18

  • Cycle vie - mvn install

    19

  • Fichiers gnrs par mvn install

    20

    projet-simple /target

    /projet-simple-1.0-SNAPSHOT.jar /classes

    /com /jcertif /App.class

    /maven-archiver /pom.properties

    /surfire-reports /com.jcertif.AppTest.txt /TEST-com.jcertif.AppTest.xml /test-classes /com /jcertif /AppTest.class

  • Excutez lapplication

    21

    java -cp target/projet-simple-1.0-SNAPSHOT.jar com.jcertif.App

  • Modifier la classe App.java

    22

  • Excutez : mvn install

    23

    [INFO] -------------------------------------------------------------[ERROR] COMPILATION ERROR : [INFO] -------------------------------------------------------------[ERROR] /dev/jcertif/projet-simple/src/main/java/com/jcertif/App.java:[11,8] cannot find symbolsymbol : class JFramelocation: class com.jcertif.App[ERROR] /dev/jcertif/projet-simple/src/main/java/com/jcertif/App.java:[11,28] cannot find symbolsymbol : class JFramelocation: class com.jcertif.App[INFO] 2 errors [INFO] -------------------------------------------------------------[INFO] ------------------------------------------------------------------------[INFO] BUILD FAILURE[INFO] ------------------------------------------------------------------------[INFO] Total time: 2.072s[INFO] Finished at: Sun Aug 19 14:47:03 CEST 2012[INFO] Final Memory: 8M/81M[INFO] ------------------------------------------------------------------------

  • Corriger la classe

    24

    Les ressources du JDK sont accessibles sans ajout de dpendance

  • Excutez : mvn install

    25

    [INFO] ------------------------------------------------------------------------[INFO] BUILD SUCCESS[INFO] ------------------------------------------------------------------------[INFO] Total time: 3.345s[INFO] Finished at: Sun Aug 19 15:09:01 CEST 2012[INFO] Final Memory: 9M/81M[INFO] ------------------------------------------------------------------------

  • Modifier la classe AppTest.java

    26

    Mise en chec du test

  • Excutez mvn install

    27

    ------------------------------------------------------- T E S T S-------------------------------------------------------Running com.jcertif.AppTestTests run: 1, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 0.019 sec

  • Excutezmvn install -Dmaven.test.skip

    28

    [INFO] ------------------------------------------------------------------------[INFO] BUILD SUCCESS[INFO] ------------------------------------------------------------------------[INFO] Total time: 1.787s[INFO] Finished at: Sun Aug 19 15:27:25 CEST 2012[INFO] Final Memory: 5M/81M[INFO] ------------------------------------------------------------------------

    Pas dexcution des tests

  • O rcuprer les dpendances ?

    29

    Dpt localpar dfaut : [user.dir]/.m2/repository

    Dpt distantpar dfaut : http://repo.maven.org/maven2/

    mvn install

    1 - Recherche en local

    2 - Si pas trouv en local, recherche via le web

  • Diffrents types de dpendance

    compile (par dfaut) : indispensable la compilation runtime : inutile la compilation mais indispensable lexcution test : utile uniquement la compilation et lexcution des tests provided : indispensable la compilation, dpendance fournie par

    lenvironnement dexcution.

    system : dpendance rcuprer en local, hors dpt Maven => ne pas utiliser dans la mesure du possible

    30

  • Transitivit des dpendances

    31

    Projet A Projet B

    Projet D

    Projet Cdpend de d

    pend de

    dpend de

    dpend de

    => Le projet A peut utiliser les classes des projets B, C et D

  • TP 2 : Grer les dpendances

    32

    Objectif : - utiliser la bibliothque commons-lang- visualiser/analyser les dpendances- exclusion de bibliothque

  • Modifier la classe App.java

    33

    Utilisation de la classe RandomStringUtils de la bibliothque

    commons-lang

  • mvn install

    34

    [INFO] -------------------------------------------------------------[ERROR] COMPILATION ERROR : [INFO] -------------------------------------------------------------[ERROR] /dev/jcertif/projet-simple/src/main/java/com/jcertif/App.java:[3,25] package org.apache.commons does not exist[ERROR] /dev/jcertif/projet-simple/src/main/java/com/jcertif/App.java:[13,24] cannot find symbolsymbol : variable RandomStringUtilslocation: class com.jcertif.App[INFO] 2 errors [INFO] -------------------------------------------------------------[INFO] ------------------------------------------------------------------------[INFO] BUILD FAILURE[INFO] ------------------------------------------------------------------------[INFO] Total time: 1.508s[INFO] Finished at: Sun Aug 19 17:04:31 CEST 2012[INFO] Final Memory: 8M/81M[INFO] ------------------------------------------------------------------------

  • Ajouter la dpendancecommons-lang

    35

  • mvn install

    36

    [INFO] ------------------------------------------------------------------------[INFO] BUILD SUCCESS[INFO] ------------------------------------------------------------------------[INFO] Total time: 3.771s[INFO] Finished at: Sun Aug 19 17:33:30 CEST 2012[INFO] Final Memory: 9M/81M[INFO] ------------------------------------------------------------------------

  • Ajouter une dpendance vers Hibernate-core

    37

  • mvn dependency:tree

    38

    [INFO] [INFO] --- maven-dependency-plugin:2.1:tree (default-cli) @ projet-simple ---[INFO] com.jcertif:projet-simple:jar:1.0-SNAPSHOT[INFO] +- junit:junit:jar:3.8.1:test[INFO] +- commons-lang:commons-lang:jar:2.6:compile[INFO] \- org.hibernate:hibernate-core:jar:4.1.2:compile[INFO] +- antlr:antlr:jar:2.7.7:compile[INFO] +- org.jboss.logging:jboss-logging:jar:3.1.0.GA:compile[INFO] +- org.jboss.spec.javax.transaction:jboss-transaction-api_1.1_spec:jar:1.0.0.Final:compile[INFO] +- dom4j:dom4j:jar:1.6.1:compile[INFO] +- org.hibernate.javax.persistence:hibernate-jpa-2.0-api:jar:1.0.1.Final:compile[INFO] +- org.javassist:javassist:jar:3.15.0-GA:compile[INFO] \- org.hibernate.common:hibernate-commons-annotations:jar:4.0.1.Final:compile

  • Exclure la bibliothque dom4j

    39

  • mvn dependency:tree

    40

    [INFO] [INFO] --- maven-dependency-plugin:2.1:tree (default-cli) @ projet-simple ---[INFO] com.jcertif:projet-simple:jar:1.0-SNAPSHOT[INFO] +- junit:junit:jar:3.8.1:test[INFO] +- commons-lang:commons-lang:jar:2.6:compile[INFO] \- org.hibernate:hibernate-core:jar:4.1.2:compile[INFO] +- antlr:antlr:jar:2.7.7:compile[INFO] +- org.jboss.logging:jboss-logging:jar:3.1.0.GA:compile[INFO] +- org.jboss.spec.javax.transaction:jboss-transaction-api_1.1_spec:jar:1.0.0.Final:compile[INFO] +- org.hibernate.javax.persistence:hibernate-jpa-2.0-api:jar:1.0.1.Final:compile[INFO] +- org.javassist:javassist:jar:3.15.0-GA:compile[INFO] \- org.hibernate.common:hibernate-commons-annotations:jar:4.0.1.Final:compile

    pas de dpendance vers dom4j

  • mvn dependency:analyze

    41

    [INFO] [INFO]

  • TP 3 : Utiliser les plugins Maven

    42

    Illustration avec le plugin exec-maven-plugin

  • Modifier le fichier pom.xml

    43

  • mvn install

    44

    [INFO] [INFO] >>> exec-maven-plugin:1.1:java (default) @ projet-simple >>>[INFO] [INFO]

  • TP 4 : Utiliser les ressources

    45

    Objectif : crer un fichier de proprits et lutiliser dans son application

  • Crer un fichier de paramtrage

    46

    projet-simple /src /main /resources /param.properties

  • Ajouter la proprit carac.count

    47

    carac.count=4

    param.properties

  • Utiliser la proprit carac.count dans App.java

    48

  • mvn install

    49

    [INFO] [INFO] >>> exec-maven-plugin:1.1:java (default) @ projet-simple >>>[INFO] [INFO]

  • Modifier la proprit carac.count

    50

    carac.count=20

    param.properties

  • mvn install

    51

    [INFO] [INFO] >>> exec-maven-plugin:1.1:java (default) @ projet-simple >>>[INFO] [INFO]

  • TP 5 : Utiliser des variables

    52

    Objectif : variabiliser la construction dun projet

  • Complter le fichier params.properties

    53

    carac.count=4projet.nom=${project.artifactId}projet.version=${project.version}

    param.properties

  • Modifier la classe App.java

    54

  • mvn install

    55

    INFO] [INFO] >>> exec-maven-plugin:1.1:java (default) @ projet-simple >>>[INFO] [INFO]

  • Activer la mise jour des variables dans les ressources

    56

  • mvn install

    57

    [INFO] [INFO] >>> exec-maven-plugin:1.1:java (default) @ projet-simple >>>[INFO] [INFO]

  • Crer la proprit carac.count dans le fichier pom.xml

    58

  • Utiliser la variable ${carac.count}

    59

    carac.count=${carac.count}projet.nom=${project.artifactId}projet.version=${project.version}

    param.properties

  • mvn install

    60

    [INFO] [INFO] >>> exec-maven-plugin:1.1:java (default) @ projet-simple >>>[INFO] [INFO]

  • TP 6 : Utiliser les profils

    61

    Excuter lapplication uniquement dans un profil

  • Supprimer lutilisation du plugin exec-maven-plugin

    62

  • Crer le profil exec-appli

    63

  • mvn install

    64

    => Pas dexcution de lapplication

  • mvn install -Pexec-appli

    65

    [INFO] [INFO] >>> exec-maven-plugin:1.1:java (default) @ projet-simple >>>[INFO] [INFO]

  • Une valeur de proprit par profil

    66

  • mvn install -Pexec-appli

    67

    [INFO] [INFO] >>> exec-maven-plugin:1.1:java (default) @ projet-simple >>>[INFO] [INFO]

  • Activer un profil par dfaut

    68

  • mvn install

    69

    [INFO] [INFO] >>> exec-maven-plugin:1.1:java (default) @ projet-simple >>>[INFO] [INFO]

  • TP 4 : Projet multimodules

    70

    Objectif : crer un ensemble de projet interdpendant

  • Crer un projet parent

    71

    mvn archetype:generate -DgroupId=com.jcertif -DartifactId=projet-parent -Dversion=1.0.0 -DinteractiveMode=false

  • Supprimer le rpertoire /src et Modifier le fichier pom.xml

    72

  • Crer deux projets dans le rpertoire projet-parent

    73

    mvn archetype:generate -DgroupId=com.jcertif -DartifactId=projet-simple-dao -Dversion=1.0.0 -DinteractiveMode=false

    mvn archetype:generate -DgroupId=com.jcertif -DartifactId=projet-simple-service -Dversion=1.0.0 -DinteractiveMode=false

  • projet-parent : pom.xml

    74

  • projet-dao : pom.xml

    75

  • projet-parent : mvn install

    76

    INFO] ------------------------------------------------------------------------[INFO] Reactor Summary:[INFO] [INFO] projet-parent ..................................... SUCCESS [0.515s][INFO] projet-simple-dao ................................. SUCCESS [3.455s][INFO] projet-simple-service ............................. SUCCESS [0.564s][INFO] ------------------------------------------------------------------------[INFO] BUILD SUCCESS[INFO] ------------------------------------------------------------------------[INFO] Total time: 4.669s[INFO] Finished at: Sun Aug 19 22:24:40 CEST 2012[INFO] Final Memory: 9M/81M[INFO] ------------------------------------------------------------------------

  • projet-simple-dao : mvn install

    77

    [INFO] ------------------------------------------------------------------------[INFO] BUILD SUCCESS[INFO] ------------------------------------------------------------------------[INFO] Total time: 2.074s[INFO] Finished at: Sun Aug 19 22:26:40 CEST 2012[INFO] Final Memory: 4M/81M[INFO] ------------------------------------------------------------------------

  • Management des dpendances dans projet-parent:pom.xml

    78

  • Plus besoin de prciser la version dans les modules

    79

  • mvn install

    80

    [INFO] ------------------------------------------------------------------------[INFO] Reactor Summary:[INFO] [INFO] projet-parent ..................................... SUCCESS [0.409s][INFO] projet-simple-dao ................................. SUCCESS [1.466s][INFO] projet-simple-service ............................. SUCCESS [0.529s][INFO] ------------------------------------------------------------------------[INFO] BUILD SUCCESS[INFO] ------------------------------------------------------------------------[INFO] Total time: 2.544s[INFO] Finished at: Sun Aug 19 22:34:32 CEST 2012[INFO] Final Memory: 4M/81M[INFO] ------------------------------------------------------------------------

  • Management des plugins dans projet-parent : pom.xml

    81

  • Utilisation dun plugin dans le module projet-simple-dao

    82

    la version du plugin nest plus indispensable

  • projet-parent : mvn install

    83

    [INFO] [INFO] >>> exec-maven-plugin:1.1:java (default) @ projet-simple-dao >>>[INFO] [INFO]

  • Maven & les IDE

    84

  • Gnrer le site de votre projet

    85

    Excutez la commande : mvn site

  • Ouvrer le fichier target/index.html avec un navigateur

    86

  • 87

    Merci !