GRADLE                        Grégory Boissinot                          10/05/2010  Présentation Gradle                  ...
•  Consultant et formateur chez Zenika•  Mes spécialités    – Ant/Ivy    – Maven    – Gradle    – Hudson•  Contributeur Hu...
•  Système de build pour la JVM Java, focalisé sur le build   des applications dentreprise•  Modèle de description du buil...
1ère génération    2ème génération              3ème génération2000                2005                         2008      ...
<!–- ANT -- build.xml --><project>  <property name="version"                                <!–- MAVEN – pom.xml-->       ...
Distribution Gradle  CORE               UI         WRAPPER                OPEN-API          DOCS                          ...
Écrire un script Gradle consiste à configurer un objet Gradle Project                                                     ...
Un script de build Gradle est défini par un ensemble de tâches sur  lesquelles sont ajoutées des actions qui sont des clos...
task mycopy (type:Copy){  from(file(resources))  into(file(target))                                                    Con...
<!– HelloTask.groovy -->class HelloTask extends DefaultTask {    def message="Default Message"    @TaskAction    public vo...
ant {  def wsdl2java_classpath = path {      fileset(dirs:lib, includes: *.jar)  }  taskdef(    name: axiswsdl2java,    cl...
build.xml                 <project>                   <target name="antTask">                     <echo message="Hello fro...
import org.junit.Asserttask myzip (type:Zip) {  from somedir  include *.txt  baseName=zipname  doLast {   Assert.assertEqu...
Chaque plugin déclaré apporte un ensemble de tâches et de propriétés  CORE               UI        WRAPPER              OP...
> gradle clean build                                  :cleanapply plugin:java               :compileJava                  ...
apply plugin:war                                                 > gradle build -PskipTestprocessResources.enabled=false  ...
Soyez informé de tous les événements de votre chaîne de build     class MyTestListener implements TestListener{         vo...
<!-- settings.gradle -->                                   sharedinclude api,        shared,        services:webservices <...
apply plugin:javarepositories {  mavenCental()  flatDir(dirs:destrepo,                               IVY          name:ivy...
apply plugin:javaapply plugin:maven                               Maven                                                   ...
•  Amélioration constante de la DSL pour encore plus de richesse et   de simplicité•  Support amélioré dans les IDE•  Une ...
gmock   spcok           Présentation Gradle   22
•  Gradle vous offre toute la richesse pour exprimer vos chaines de   build au plus près de vos besoins•  Gradle fournit u...
Upcoming SlideShare
Loading in …5
×

Gradle_Paris2010

1,049 views
997 views

Published on

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,049
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
6
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Gradle_Paris2010

  1. 1. GRADLE Grégory Boissinot 10/05/2010 Présentation Gradle 1
  2. 2. •  Consultant et formateur chez Zenika•  Mes spécialités – Ant/Ivy – Maven – Gradle – Hudson•  Contributeur Hudson•  Introduction et mis en place de Gradle chez un très grand compte industriel Présentation Gradle 2
  3. 3. •  Système de build pour la JVM Java, focalisé sur le build des applications dentreprise•  Modèle de description du build très riche à travers une API•  Flexible à la Ant avec les conventions de Maven à la demande•  Une gestion avancée dun projet multi-modules•  Support et insertion totale dans des infrastructures Maven et Ant/Ivy existantes Présentation Gradle 3
  4. 4. 1ère génération 2ème génération 3ème génération2000 2005 2008 2 3 1 Présentation Gradle 4
  5. 5. <!–- ANT -- build.xml --><project> <property name="version" <!–- MAVEN – pom.xml--> value="1.0"/> <?xml version="1.0" encoding="UTF-8"?> <target name="antTask> <project> <echo message="Hello"/> <modelVersion>4.0.0</modelVersion> </target> <groupId>com.zenika</groupId></project> <artifactId>zenikac-core</artifactId> <version>1.0</version><!–- GRADLE– build.gradle --> <dependencies>apply plugin:java <dependency> <groupId>org.apache.wicket</groupId>repositories { <artifactId>wicket</artifactId> mavenCental() <version>1.4.7</version> flatDir(dirs:lib) <scope>compile</scope>} </dependency> </dependencies>dependencies { </project> compile "org.apache.wicket:wicket:1.4.7"} Présentation Gradle 5
  6. 6. Distribution 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 outilscheckstyle codeNarc webdav Autres dépendances Librairies tierces Présentation Gradle 6
  7. 7. Écrire un script Gradle consiste à configurer un objet Gradle Project configurations repositories dependencies build.gradle Project ant task artifacts API Présentation Gradle 7
  8. 8. Un script de build Gradle est défini par un ensemble de tâches sur lesquelles sont ajoutées des actions qui sont des closures Groovy<!-- build.gradle -->task(hello)hello.doFirst{ > gradle hello println "Hello World" :hello Hello World for (int i:[1,2,3]){ 123 print i } > gradle distribution} :distribution Print Distributiontask(distribution).doFirst { println "Print Distribution" > gradle release} :distribution Print Distribution :releasetask(release) Print Releaserelease.dependsOn(distribution)release.doFirst{ println "Print Release"} Présentation Gradle 8
  9. 9. task mycopy (type:Copy){ from(file(resources)) into(file(target)) ConventionTask include(**/*.txt, **/*.xml)}myCopy.include(**/*.properties) SourceTask AbstractCopyTask Javadoc Copy AbstractArchiveTask Zip Tarpublic class Copy extends AbstractCopyTask { public AbstractCopyTask from(Object... sourcePaths); public AbstractCopyTask into(Object destDir);} Jar War Présentation Gradle 9
  10. 10. <!– HelloTask.groovy -->class HelloTask extends DefaultTask { def message="Default Message" @TaskAction public void print(){ > gradle myhello println message :myhello } Default Message} > gradle myhello2<!-- build.gradle --> :myhello2 Task Messagetask(myhello, type:HelloTask)task(myhello2, type:HelloTask){ message="Task Message"} Présentation Gradle 10
  11. 11. ant { def wsdl2java_classpath = path { fileset(dirs:lib, includes: *.jar) } taskdef( name: axiswsdl2java, classname: org.apache.axis.tools.ant.wsdl.Wsdl2javaAntTask, classpath: wsdl2java_classpath ) axiswsdl2java( output:"generated", verbose:"true" , url:"Exemple.wsdl" )}ant.echo (message:ANT) Présentation Gradle 11
  12. 12. build.xml <project> <target name="antTask"> <echo message="Hello from Ant"/> </target> </project> build.gradle ant.importBuild(build.xml) antTask.doLast { println(Hello from Gradle) }> gradle antTask:antTaskHello from AntHello from Gradle Présentation Gradle 12
  13. 13. import org.junit.Asserttask myzip (type:Zip) { from somedir include *.txt baseName=zipname doLast { Assert.assertEquals(zipname.zip, myzip.archiveName) Assert.assertEquals(file(build/distributions), myzip.destinationDir) Assert.assertTrue( ! zipTree(myzip.archivePath).isEmpty()) ziptxtfiles=zipTree(myzip.archivePath).matching{ include(*.txt) } txtfiles=fileTree(somedir).include(*.txt) Assert.assertEquals ( txtfiles.getFiles().size(), ziptxtfiles.getFiles().size()) }} Présentation Gradle 13
  14. 14. Chaque plugin déclaré apporte un ensemble de tâches et de propriétés 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 outils Présentation Gradle 14
  15. 15. > gradle clean build :cleanapply plugin:java :compileJava :processResourcesrepositories { :classes mavenCentral() :jar flatDir(dirs:destrepo, :assemble name:ivyrep’) :compileTestJava myLib} :processTestResources .jar :testClassesdependencies { :test compile :check "jdom:jdom:1.0", :build ":qtjambi:4.5.2_01" testCompile BUILD SUCCESSFUL "junit:junit:4.7"} Total time: 2.937 secs Présentation Gradle 15
  16. 16. apply plugin:war > gradle build -PskipTestprocessResources.enabled=false :compileJava :processResources SKIPPED//Add behavior in the lifecycle :classestask(preJar) :preJarjar.dependsOn preJar :jar :war//Predicate :assemble :compileTestJavatest.onlyIf{ :processTestResources !project.hasProperty(skipTests) :testClasses} :test SKIPPED :check//Change the output directory :buildbuildDirName=target BUILD SUCCESSFUL//Change the source directory Total time: 2.937 secssourceSets{ main{ java.srcDir file(src/main) }} Présentation Gradle 16
  17. 17. Soyez informé de tous les événements de votre chaîne de build class MyTestListener implements TestListener{ void beforeSuite(TestDescriptor suite) { println(suiteStarting: +suite.getName()) } void afterSuite(TestDescriptor suite, TestResult result) { println suiteFinished: +suite.getName() } void beforeTest(TestDescriptor test) { println testStarting: +test.getName() } void afterTest(TestDescriptor test, TestResult result) { println testFinished: +test.getName() +, result: +result.getResultType() } } Présentation Gradle 17
  18. 18. <!-- settings.gradle --> sharedinclude api, shared, services:webservices <!–- build.gradle --> webservices api version=1.0 subprojects { apply plugin: java api > gradle buildNeeded } :shared:jar project(:api) { :api:jar dependencies { :api:test compile project(:shared) :shared:test } }<!–- webservices/build.gradle --> api > gradle buildDependentsapply plugin:war :shared:jardependencies { :api:jar compile :api:test project(:shared), :webservices:war project(:api), :webservices:test commons-io:commons-io:1.2} Présentation Gradle 18
  19. 19. apply plugin:javarepositories { mavenCental() flatDir(dirs:destrepo, IVY name:ivyrep’)}group=testversion=1.0status=release > gradle uploadArchivesuploadArchives { repositories { add(repositories.ivyrep) }} Repository Ivy distant Artifacts + meta Ivy Présentation Gradle 19
  20. 20. apply plugin:javaapply plugin:maven Maven Antgroup=test Tasksversion=1.0-SNAPSHOTuploadArchives { repositories { mavenDeployer { repository( > gradle > gradle url: remoteRepo) install uploadArchives } }} Repository Repository Maven Maven Artifacts + Local meta Maven distant Artifacts + meta Maven Présentation Gradle 20
  21. 21. •  Amélioration constante de la DSL pour encore plus de richesse et de simplicité•  Support amélioré dans les IDE•  Une abstraction de Ivy pour encore un gestionnaire de dépendance plus avancé•  Parallélisation/Distribution des builds•  Réutilisation des plugins Maven et import de projets Maven•  Simplification dans la phase de publication des artefacts Présentation Gradle 21
  22. 22. gmock spcok Présentation Gradle 22
  23. 23. •  Gradle vous offre toute la richesse pour exprimer vos chaines de build au plus près de vos besoins•  Gradle fournit une approche déclarative de premier plan•  Gradle est un système de build complet et alternatif pour builder vos applications•  Gradle sinsère nativement en lecture et en écriture dans votre existant pour lenrichir Présentation Gradle 23

×