NormandyJUG        20 octobre 2009           Builders BattleMaven / Ivy / Ant / Gradle / EasyAnt ...
Grégory Boissinot• Committer Hudson depuis 2008• Consultant Zenika  – Spécialiste sur les outils de build et    lintégrati...
Gradle en quelque mots•   Système de build complet et flexible à la Ant•   Utilisation des conventions de Maven à la deman...
Architecture                                                                     Gradle   CORE            UI       WRAPPER...
Notion de tâche Un script de build Gradle est défini par un  ensemble de tâches sur lesquelle est ajouté des  actions qui ...
Les tâches ont une API                                           TâcheCopy myCopy == task(myCopy, type:Copy)    améliorée ...
Une API très richetask source(type:Jar){ task source(type:Jar){                        CustomTask baseName=source   baseNa...
Plusieurs tâches par défaut<!-- build.xml -->               <!-- build.gradle -->                                  <!-- bu...
Exécution unique et ordonnéecompile                                     dist             compileTest                      ...
Pour un projet Java/JEE                                                                     Gradle   CORE            UI   ...
Build dune librairie<!-- build.gradle -->                  Configuration <!-- build.gradle -->usePlugin java              ...
Build dune webapp                                      WEB-INF<!-- build.gradle --> <!-- build.gradle -->                o...
Phases de buildGradle fournit 3 phases distinctes de build• Initialisation   – Détermine lensemble des projets à builder  ...
Gradle fournit des cycles de vies (1/2)Ensemble de tâches prédéfinies              Exemple            du plugin java
Des conventions de répertoires                                                             Très                           ...
Gestion des dépendances avec Ivy                                                                     Gradle   CORE        ...
Gestion des dépendances                Repository                                                • Support complet de     ...
Définition des repositoriesrepositories {{ repositories    mavenCentral()     mavenCentral()    mavenRepo urls:"http://ser...
Déclaration des dépendances• Dépendances vers des modules (+deps)  dependencies {{   dependencies     compile "log4j:log4j...
Intégration native avec Ant                                                                     Gradle   CORE            U...
Utilisation possible des tâches Ant<!-- build.gradle -->                       Utilisation de lobjet <!-- build.gradle -->...
Gradle et Ant: dans les deux sens (1/2)                <!-- build.xml -->                 <!-- build.xml -->              ...
Gradle et Ant: dans les deux sens (2/2)<!-- build.gradle --> <!-- build.gradle -->task assemble (dependsOn: compile) << {{...
Gestion multi projet très avancée                                                                     Gradle   CORE       ...
Gestion multi projet (1/3)• Les descripteurs dans les sous                                              common jar  module...
Gestion multi projet (2/3)<!-- master build.gradle --> <!-- master build.gradle -->                <!-- pz/build.gradle --...
Gestion multi projet (3/3)/web> gradle compileJava /web> gradle compileJava:common:compileJava :common:compileJava:common:...
Gradle GUI             • Lancé par               > gradle –gui             • Exécution de               tâches            ...
Publie dans une infra Maven et Ivy                                                                     Gradle   CORE      ...
Publication dans des repo Ivy Gradle        IVY API             Repository                                      Ivy       ...
Publication dans des repo Maven              Maven                                     RepositoryGradle        Ant        ...
Production de plusieurs artefacts   Une librairie/module peut avoir plusieurs artefacts<!-- sample/build.xml --> <!-- samp...
Gestion simplifié des configurationsusePlugin java usePlugin java                          Ajout automatiqueconfigurations...
Agir simplement sur le cycle de vie• Un cycle de vie Gradle est composé dun ensemble  de tâches  – Chaque tâche est une pr...
Portée des dépendances                   (1/2)<dependency> <dependency>  <groupId>log4j</groupId>   <groupId>log4j</groupI...
Portée des dépendances (2/2)Le plugin war fournit les scopes  providedCompile et providedRuntime<build.gradle --> <build.g...
GradleLES INTÉRÊTS POUR UNEENTREPRISE
Gradle, un choix pertinent en  Entreprise• Utiliser Gradle en lieu et place de vos scripts Ant  – Réutilisation (Import) d...
GradleLES PROBLEMES
Les problèmes• Ce qui manque  – Gestion dun ear pour JEE  – Génération de la configuration IDEA et NetBeans  – Intégration...
GradleLES DOCUMENTATIONS          DOCUMENTATIONS          ?
Quelques liens• Le site web :  – http://www.gradle.org/• Un user guide  – http://www.gradle.org/0.8/docs/userguide/usergui...
GradleOÙ TROUVER DU SUPPORT ?
Support• Liste de diffusion  – http://www.gradle.org/lists.html• Support commercial  – http://www.gradle.biz/
GradleLA COMMUNAUTÉ
La communauté des utilisateurs• Les utilisateurs Groovy
Léquipe projet• 6 committeurs enregistrés• Lentreprise « Gradle inc » soutient le projet• De nouvelles contributions arriv...
Convaincu?
Upcoming SlideShare
Loading in …5
×

Gradle_NormandyJUG

739 views

Published on

Published in: Technology, Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
739
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
4
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Gradle_NormandyJUG

  1. 1. NormandyJUG 20 octobre 2009 Builders BattleMaven / Ivy / Ant / Gradle / EasyAnt ...
  2. 2. Grégory Boissinot• Committer Hudson depuis 2008• Consultant Zenika – Spécialiste sur les outils de build et lintégration continue – Formateur sur lusine logicielle – A mis en place Gradle chez un grand acteur de lindustrie
  3. 3. Gradle en quelque mots• Système de build complet et flexible à la Ant• Utilisation des conventions de Maven à la demande• Une gestion multi projet avancée• Utilisation de Apache Ivy comme gestionnaire de dépendances – Utilisation par API• Support et Insertion totale dans une infrastructure Maven et Ivy existante• Chaîne de build en Groovy• Modèle de description du build très riche
  4. 4. Architecture Gradle CORE UI WRAPPER OPEN-API DOCS api java groovy maven osgi code-quality war jetty scala eclipse project-reports plugins Ant Ivy Maven Ant Tasks Groovy build tools checkstyle codeNarc webdav other dependencies librairies tierces
  5. 5. Notion de tâche Un script de build Gradle est défini par un ensemble de tâches sur lesquelle est ajouté des actions qui sont des closures Groovy<!-- build.gradle --> Tâche <!-- build.gradle --> simpletask distribution <<{ task distribution <<{ println "Distribution" println "Distribution"}} Accès à lAPI Javatask release (dependsOn: distribution)<<{ task release (dependsOn: distribution)<<{ println "Release" println "Release"}}>> gradle distribution >> gradle release gradle release gradle distribution DistributionDistribution Distribution Distribution Release Release
  6. 6. Les tâches ont une API TâcheCopy myCopy == task(myCopy, type:Copy) améliorée Copy myCopy task(myCopy, type:Copy)myCopy.from(file(resources)) myCopy.from(file(resources))myCopy.into(file(target)) myCopy.into(file(target)) CustomTaskmyCopy.include(**/*.txt, **/*.xml) myCopy.include(**/*.txt, **/*.xml)task mycopy (type:Copy) task mycopy (type:Copy)mycopy{ Copy mycopy{ description =Copies the resources dir description =Copies the resources dir from(file(resources)) from(file(resources)) into(file(target)) into(file(target)) include(**/*.txt, **/*.xml) include(**/*.txt, **/*.xml) mycopy} }task mycopy (type:Copy){ task mycopy (type:Copy){ description =Copies the resources dir description =Copies the resources dir from(file(resources)) from(file(resources)) into(file(target)) into(file(target)) include(**/*.txt, **/*.xml) include(**/*.txt, **/*.xml)} }
  7. 7. Une API très richetask source(type:Jar){ task source(type:Jar){ CustomTask baseName=source baseName=source from sourceSets.main.java from sourceSets.main.java}} Abstract SourceTask ArchiveTasktask distrib(type:Zip){ task distrib(type:Zip){ dependsOn(jar) dependsOn(jar) baseName=dist baseName=dist from sourceSets.main.java Javadoc Zip from sourceSets.main.java from jar.archivePath from jar.archivePath}} Jar Tartask javadoc(type: Javadoc) {{ task javadoc(type: Javadoc) source sourceSets.main.allJava}} source sourceSets.main.allJava War
  8. 8. Plusieurs tâches par défaut<!-- build.xml --> <!-- build.gradle --> <!-- build.gradle --> <!-- build.xml --> defaultTasks clean,<project default="all"> defaultTasks clean, <project default="all"> jar jar<target name="clean"> <target name="clean"> <echo message="Cleaning"/> task clean << {{ task clean << <echo message="Cleaning"/> println "Cleaning"</target> println "Cleaning" </target> }}<target name="jar"> <target name="jar"> <echo message="Packaging"/> task jar << {{ task jar << <echo message="Packaging"/> println "Packaging"</target> println "Packaging" </target> }}<target name="all"> >> gradle gradle <target name="all"> Cleaning <antcall target="clean"/> <antcall target="clean"/> Cleaning <antcall target="jar"/> Packaging Packaging <antcall target="jar"/></target> </target></project> </project> >> ant ant Cleaning Cleaning Packaging Packaging
  9. 9. Exécution unique et ordonnéecompile dist compileTest test >> ant test dist ant test dist >> gradle test dist gradle test dist compile compile :compile :compile compileTest compileTest :compileTest :compileTest test test :test :test compile compile :dist :dist compileTest compileTest test test dist dist
  10. 10. Pour un projet Java/JEE Gradle CORE UI WRAPPER OPEN-API DOCS api java groovy maven osgi code-quality war jetty scala eclipse project-reports plugins Ant Ivy Maven Ant Tasks Groovy build tools checkstyle codeNarc webdav other dependencies librairies tierces
  11. 11. Build dune librairie<!-- build.gradle --> Configuration <!-- build.gradle -->usePlugin java accessible usePlugin java sous forme de propriétésarchivesBaseName == core archivesBaseName core Gradleversion == 3.5 version 3.5manifest.mainAttributes( manifest.mainAttributes( Implementation-Version: version Implementation-Version: version))repositories {{ repositories mavenCentral() mavenCentral()}} core-3.5.jardependencies {{ dependencies compile group: commons-collections, compile group: commons-collections, name: commons-collections, name: commons-collections, version: 3.2 version: 3.2 testCompile group: junit, testCompile group: junit, name: junit, name: junit, version: 4.+ version: 4.+}} >> gradle compileJava gradle compileJava >> gradle jar gradle jar
  12. 12. Build dune webapp WEB-INF<!-- build.gradle --> <!-- build.gradle --> optionelusePlugin war usePlugin warusePlugin jetty usePlugin jetty GradlearchivesBaseName == web JEE6 archivesBaseName web compatibleversion == 1.0 version 1.0repositories {{ repositories mavenCentral() mavenCentral()}}dependencies {{ dependencies web-2.4.war compile "commons-io:commons-io:1.4" compile "commons-io:commons-io:1.4" compile ("log4j:log4j:1.2.15"){ compile ("log4j:log4j:1.2.15"){ exclude(group:javax.jms) exclude(group:javax.jms) exclude(group:com.sun.jdmk) exclude(group:com.sun.jdmk) exclude(module:jmxri) exclude(module:jmxri) }}}} >> gradle war gradle war >> gradle jettyRun gradle jettyRun
  13. 13. Phases de buildGradle fournit 3 phases distinctes de build• Initialisation – Détermine lensemble des projets à builder – Création dun objet Projet pour chaque module• Configuration – Configuration des objets Project• Exécution – Exécution des tâches crées et configurés précédemment gradle.taskGraph.whenReady {taskGraph -> gradle.taskGraph.whenReady {taskGraph -> if (taskGraph.hasTask(:release)) {{ if (taskGraph.hasTask(:release)) Nombreux version == 1.0 version 1.0 }} else {{ hooks else disponibles version == 1.0-SNAPSHOT version 1.0-SNAPSHOT }} }}
  14. 14. Gradle fournit des cycles de vies (1/2)Ensemble de tâches prédéfinies Exemple du plugin java
  15. 15. Des conventions de répertoires Très <!-- build.gradle -->Gradle utilise par défaut configurable <!-- build.gradle --> sourceSets{ sourceSets{ les mêmes conventions de main{ main{ java {{ répertoires que Maven java srcDir src/java srcDir src/java Séparation }}<!-- répertoires --> <!-- répertoires --> propre resources {{+build.gradle resources +build.gradle srcDir src/resources srcDir src/resources+src/main/java +src/main/java }}+src/main/resources +src/main/resources }}+src/main/webapp +src/main/webapp main{+src/test/java main{ +src/test/java java {{ java+src/test/resources +src/test/resources srcDir src2/java srcDir src2/java }}+build/classes +build/classes resources {{+build/libs resources +build/libs srcDir src2/resources srcDir src2/resources+build/reports +build/reports }}+build/test-results +build/test-results }} }}
  16. 16. Gestion des dépendances avec Ivy Gradle CORE UI WRAPPER OPEN-API DOCS api java groovy maven osgi code-quality war jetty scala eclipse project-reports plugins Ant Ivy Maven Ant Tasks Groovy build tools checkstyle codeNarc webdav other dependencies librairies tierces
  17. 17. Gestion des dépendances Repository • Support complet de Maven local/distant Artifacts + repository Maven ou Ivy méta Maven (pom.xml) Ivy existantGradle • Interaction possible Repository Ivy avec un gestionnaire local/distant Artifacts + méta Ivy de configuration (ivy.xml) • Gestion des dépendances VCS transitives Artifacts + méta gradle (client module)
  18. 18. Définition des repositoriesrepositories {{ repositories mavenCentral() mavenCentral() mavenRepo urls:"http://serveur/archiva/repo-group" mavenRepo urls:"http://serveur/archiva/repo-group"}}repositories {{ repositories flatDir name: localRepository, dirs: lib flatDir name: localRepository, dirs: lib}}repositories {{ repositoriesadd( add( new org.apache.ivy.plugins.resolver.FileSystemResolver()){ new org.apache.ivy.plugins.resolver.FileSystemResolver()){ name == repo name repo addArtifactPattern addArtifactPattern "$projectDir/lib/[module]_[revision].[ext]" "$projectDir/lib/[module]_[revision].[ext]" descriptor == optional descriptor optional checkmodified == true checkmodified true }}}}
  19. 19. Déclaration des dépendances• Dépendances vers des modules (+deps) dependencies {{ dependencies compile "log4j:log4j:1.2.14" compile "log4j:log4j:1.2.14" testCompile "junit:junit:4.7" testCompile "junit:junit:4.7" }}• Dépendances vers des artefacts (-deps) dependencies {{ dependencies runtime "org.groovy:groovy:1.5.6@jar" runtime "org.groovy:groovy:1.5.6@jar" }}• Client modules dependencies {{ dependencies runtime module("commons-lang:commons-lang:2.4") {{ runtime module("commons-lang:commons-lang:2.4") dependency("commons-io:commons-io:1.2") dependency("commons-io:commons-io:1.2") Dépendances }} transitives sans XML }}
  20. 20. Intégration native avec Ant Gradle CORE UI WRAPPER OPEN-API DOCS api java groovy maven osgi code-quality war jetty scala eclipse project-reports plugins Ant Ivy Maven Ant Tasks Groovy build tools checkstyle codeNarc webdav other dependencies librairies tierces
  21. 21. Utilisation possible des tâches Ant<!-- build.gradle --> Utilisation de lobjet <!-- build.gradle --> Groovy AntBuildertask generateStub << {{ task generateStub << ant {{ ant def wsdl2java_classpath == path {{ def wsdl2java_classpath path fileset(dir: lib) {{ fileset(dir: lib) include(name: *.jar) include(name: *.jar) }} }} taskdef( name: axisWsdl2java, taskdef( name: axisWsdl2java, classname: classname: org.apache.axis.tools.ant.wsdl.Wsdl2javaAntTask, org.apache.axis.tools.ant.wsdl.Wsdl2javaAntTask, classpath: wsdl2java_classpath classpath: wsdl2java_classpath )) axisWsdl2java( output:"generated", axisWsdl2java( output:"generated", verbose:"true" ,, url:"Exemple.wsdl") verbose:"true" url:"Exemple.wsdl") }}}}
  22. 22. Gradle et Ant: dans les deux sens (1/2) <!-- build.xml --> <!-- build.xml --> <property name="src.dir" value="src"> <property name="src.dir" value="src"> <target name="compile"> <target name="compile"> <echo message="Compile,from Ant"/> <echo message="Compile,from Ant"/> </target> </target><!-- build.gradle --> <!-- build.gradle -->ant.importBuild build.xml ant.importBuild build.xml//Complément de la tâche compile //Complément de la tâche compilecompile << {{ compile << println "Added compiling from Gradle" println "Added compiling from Gradle" println "SourceDir: ${ant.properties[src.dir]}" println "SourceDir: ${ant.properties[src.dir]}"}}>> gradle compile gradle compile:compile :compile[ant:echo] Compile, from Ant [ant:echo] Compile, from AntAdded compiling from Gradle Added compiling from GradleSourceDir: src SourceDir: src
  23. 23. Gradle et Ant: dans les deux sens (2/2)<!-- build.gradle --> <!-- build.gradle -->task assemble (dependsOn: compile) << {{ task assemble (dependsOn: compile) << println Assemble, from Gradle println Assemble, from Gradle}} <!-- build.xml --> <!-- build.xml --> <target name="deploy" depends="assemble"> <target name="deploy" depends="assemble"> <echo message="Deploy, from Ant"/> <echo message="Deploy, from Ant"/> </target> </target>>> gradle deploy gradle deploy:compile :compile[ant:echo] Compile, from Ant [ant:echo] Compile, from AntAdded compiling from Gradle Added compiling from Gradle:assemble :assembleAssemble, from Gradle Assemble, from Gradle:deploy :deploy[ant:echo] Deploy, from Ant [ant:echo] Deploy, from Ant
  24. 24. Gestion multi projet très avancée Gradle CORE UI WRAPPER OPEN-API DOCS api java groovy maven osgi code-quality war jetty scala eclipse project-reports plugins Ant Ivy Maven Ant Tasks Groovy build tools checkstyle codeNarc webdav other dependencies librairies tierces
  25. 25. Gestion multi projet (1/3)• Les descripteurs dans les sous common jar modules sont optionnels• Injection de configuration depends depends• Possibilité de mettre toute la biz-auth pz war war logique de build dans le parent<!-- Structure de répertoires --> <!-- Structure de répertoires --> <!-- settings.gradle --> <!-- settings.gradle -->+build.gradle +build.gradle include include+settings.gradle +settings.gradle "common", "common",+common/ +common/ "pz", "pz",+pz/ +pz/ "biz:auth" "biz:auth" +build.gradle +build.gradle-biz/ -biz/ -- biz-auth/ biz-auth/
  26. 26. Gestion multi projet (2/3)<!-- master build.gradle --> <!-- master build.gradle --> <!-- pz/build.gradle --> <!-- pz/build.gradle -->subprojects{ subprojects{ usePlugin war usePlugin war usePlugin(java) usePlugin(java) group=org.jug.normandyjug group=org.jug.normandyjug dependencies{ dependencies{ version=1.0 version=1.0 compile compile project(:common) project(:common) repositories{ repositories{ }} mavenCentral() mavenCentral() }} dependencies {{ dependencies testCompile junit:junit:4.7 testCompile junit:junit:4.7 }} cross project configuration}}project(:biz:biz-auth){ project(:biz:biz-auth){ dependencies{ dependencies{ compile project(:common) compile project(:common) }} usePlugin war usePlugin war}}
  27. 27. Gestion multi projet (3/3)/web> gradle compileJava /web> gradle compileJava:common:compileJava :common:compileJava:common:processResources :common:processResources:common:classes :common:classes:common:jar :common:jar:common:uploadDefaultInternal :common:uploadDefaultInternal:pz:compileJava :pz:compileJava:biz:biz-auth:compileJava :biz:biz-auth:compileJava/web/biz/biz-auth> gradle compileJava /web/biz/biz-auth> gradle compileJava:common:compileJava :common:compileJava:common:processResources Compilation :common:processResources des projets:common:classes :common:classes:common:jar dépendants :common:jar:common:uploadDefaultInternal :common:uploadDefaultInternal:biz:biz-auth:compileJava :biz:biz-auth:compileJava/web/biz/biz-auth> gradle compileJava -a /web/biz/biz-auth> gradle compileJava -a Utilisation:biz:biz-auth:compileJava :biz:biz-auth:compileJava des jars dans le cache
  28. 28. Gradle GUI • Lancé par > gradle –gui • Exécution de tâches • Paramétrage du niveau de log
  29. 29. Publie dans une infra Maven et Ivy Gradle CORE UI WRAPPER OPEN-API DOCS api java groovy maven osgi code-quality war jetty scala eclipse project-reports plugins Ant Ivy Maven Ant Tasks Groovy build tools checkstyle codeNarc webdav other dependencies librairies tierces
  30. 30. Publication dans des repo Ivy Gradle IVY API Repository Ivy Artifacts + meta IvyusePlugin java usePlugin javaversion=1.0 version=1.0uploadArchives{ uploadArchives{ repositories{ repositories{ flatDir(dirs:destRepo) flatDir(dirs:destRepo) }}}} >> gradle uploadArchives gradle uploadArchives
  31. 31. Publication dans des repo Maven Maven RepositoryGradle Ant Maven distant Tasks Repository Artifacts + Maven local Artifacts + meta Maven meta MavenusePlugin java usePlugin javausePlugin maven usePlugin mavengroup=org.jug.normandyjug group=org.jug.normandyjugarchivesBaseName=artefact-ex archivesBaseName=artefact-exversion=1.0-SNAPSHOT version=1.0-SNAPSHOTuploadArchives {{ uploadArchives repositories.mavenDeployer {{ repositories.mavenDeployer snapshotRepository(url: snapshotRepository(url: "http://serveur/archiva/repository/snapshots") "http://serveur/archiva/repository/snapshots")}} >> gradle install gradle install >> gradle uploadArchives gradle uploadArchives
  32. 32. Production de plusieurs artefacts Une librairie/module peut avoir plusieurs artefacts<!-- sample/build.xml --> <!-- sample/build.xml -->usePlugin java usePlugin java Gradletask sourceJar(type: Jar) task sourceJar(type: Jar)task distrib(type: Zip) task distrib(type: Zip)artifacts{ artifacts{ archives sourceJar, distrib archives sourceJar, distrib}} Repositoryrepositories{ repositories{ Ivy flatDir name:repo, dirs:repo flatDir name:repo, dirs:repo}} sample source dist ivy.xmluploadArchives {{ -1.0.jar -1.0.jar -1.0.zip uploadArchives repositories {{ repositories add project.repositories.repo add project.repositories.repo }}}} >> gradle uploadArchives gradle uploadArchives
  33. 33. Gestion simplifié des configurationsusePlugin java usePlugin java Ajout automatiqueconfigurations{ configurations{ de sources sources build[ConfigurationName] master {{ et master extendsFrom archives, sources upload[ConfigurationName] extendsFrom archives, sources }}}}artifacts{ artifacts{ sources sourceJar sources sourceJar master distrib master distrib}}uploadArchives{ uploadArchives{ repositories{ repositories{ flatDir(dirs: file(repos), name:destRepo) flatDir(dirs: file(repos), name:destRepo) }}}}uploadSources{ uploadSources{ repositories{ repositories{ add project.uploadArchives.repositories.destRepo add project.uploadArchives.repositories.destRepo }}}}uploadMaster.repositories=uploadSources.repositories uploadMaster.repositories=uploadSources.repositories
  34. 34. Agir simplement sur le cycle de vie• Un cycle de vie Gradle est composé dun ensemble de tâches – Chaque tâche est une propriété du projet – Chaque tâche possède une propriété « enabled » compileTestJava.enabled=false compileTestJava.enabled=false processTestResources.enabled=false processTestResources.enabled=false testClasses.enabled=false testClasses.enabled=false test.enabled=false test.enabled=false
  35. 35. Portée des dépendances (1/2)<dependency> <dependency> <groupId>log4j</groupId> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <artifactId>log4j</artifactId> commons- <version>1.2;14</version> <version>1.2;14</version> codec</dependency> </dependency><dependency> <dependency> <groupId>commons-httpclient</groupId> <groupId>commons-httpclient</groupId> <artifactId>commons-httpclient</artifactId> <artifactId>commons-httpclient</artifactId> <version>3.0</version> <version>3.0</version> <scope>provided</scope> commons- <scope>provided</scope> httpclient</dependency> </dependency><dependency> <dependency> <groupId>commons-codec</groupId> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <artifactId>commons-codec</artifactId> <version>1.2</version> <version>1.2</version></dependency> </dependency> <!-- Contenu de larchive --> <!-- Contenu de larchive --> WEB-INF/lib WEB-INF/lib -- log4j-1.2.14.jar log4j-1.2.14.jar -- commons-codec-1.2jar commons-codec-1.2jar
  36. 36. Portée des dépendances (2/2)Le plugin war fournit les scopes providedCompile et providedRuntime<build.gradle --> <build.gradle -->dependencies {{ dependencies compile "log4j:log4j:1.2.14" compile "log4j:log4j:1.2.14" providedCompile "commons-httpclient:commons- providedCompile "commons-httpclient:commons-httpclient:3.0" httpclient:3.0" compile "commons-codec:commons-codec:1.2" compile "commons-codec:commons-codec:1.2"}} <!-- Contenu de larchive --> <!-- Contenu de larchive --> WEB-INF/lib WEB-INF/lib -- log4j-1.2.14.jar log4j-1.2.14.jar
  37. 37. GradleLES INTÉRÊTS POUR UNEENTREPRISE
  38. 38. Gradle, un choix pertinent en Entreprise• Utiliser Gradle en lieu et place de vos scripts Ant – Réutilisation (Import) de scripts Ant existant – Utilisation de toute tâche native• Utiliser Gradle avec votre infrastructure Ivy – Intégration plus profonde et plus riche• Utiliser Gradle avec votre infrastructure Maven existante – Les même conventions que Maven – Simplicité de gestion des dépendances Maven – Flexibilité au besoin
  39. 39. GradleLES PROBLEMES
  40. 40. Les problèmes• Ce qui manque – Gestion dun ear pour JEE – Génération de la configuration IDEA et NetBeans – Intégration avec les outils de couvertures de code ou dautres outils de métriques (Findbugs, …) • Délégation à des tâches Ant aujourdhui• Un manque de maturité – Changement de la DSL entre chaque release
  41. 41. GradleLES DOCUMENTATIONS DOCUMENTATIONS ?
  42. 42. Quelques liens• Le site web : – http://www.gradle.org/• Un user guide – http://www.gradle.org/0.8/docs/userguide/userguide.html – http://www.gradle.org/0.8/docs/userguide/userguide.pdf• Un cookbook – http://docs.codehaus.org/display/GRADLE/Cookbook• Le wiki projet : – http://docs.codehaus.org/display/GRADLE/Home
  43. 43. GradleOÙ TROUVER DU SUPPORT ?
  44. 44. Support• Liste de diffusion – http://www.gradle.org/lists.html• Support commercial – http://www.gradle.biz/
  45. 45. GradleLA COMMUNAUTÉ
  46. 46. La communauté des utilisateurs• Les utilisateurs Groovy
  47. 47. Léquipe projet• 6 committeurs enregistrés• Lentreprise « Gradle inc » soutient le projet• De nouvelles contributions arrivent
  48. 48. Convaincu?

×