Your SlideShare is downloading. ×
Gradle_Paris2010
Gradle_Paris2010
Gradle_Paris2010
Gradle_Paris2010
Gradle_Paris2010
Gradle_Paris2010
Gradle_Paris2010
Gradle_Paris2010
Gradle_Paris2010
Gradle_Paris2010
Gradle_Paris2010
Gradle_Paris2010
Gradle_Paris2010
Gradle_Paris2010
Gradle_Paris2010
Gradle_Paris2010
Gradle_Paris2010
Gradle_Paris2010
Gradle_Paris2010
Gradle_Paris2010
Gradle_Paris2010
Gradle_Paris2010
Gradle_Paris2010
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Gradle_Paris2010

905

Published on

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

No Downloads
Views
Total Views
905
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
6
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. GRADLE Grégory Boissinot 10/05/2010 Présentation Gradle 1
  • 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. •  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. 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. <!–- 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. 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. É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. 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. 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. <!– 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. 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. 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. 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. 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. > 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. 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. 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. <!-- 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. 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. 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. •  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. gmock spcok Présentation Gradle 22
  • 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

×