jcertif 2012 : maven par la pratique
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 !