enter the gradle - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/enter-the-gradle.pdf · enter the...
TRANSCRIPT
![Page 2: Enter the Gradle - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/enter-the-gradle.pdf · Enter the Gradle Sunday, October 30, 11. What you will learn ‣ Declarativeness ‣ Extensibility](https://reader033.vdocuments.site/reader033/viewer/2022060523/60522ab6c9c5dd797d5121de/html5/thumbnails/2.jpg)
What you will learn‣ Declarativeness
‣ Extensibility
‣ Performance Features
‣ Build Integration
‣ Build Migration
‣ Testing
‣ Discoverability
‣ Multiproject Builds
‣ Eclipse Integration
‣ Gradle Bootstrap Install
‣ C/C++
‣ Sonar Integration
‣ Discovery
Sunday, October 30, 11
![Page 3: Enter the Gradle - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/enter-the-gradle.pdf · Enter the Gradle Sunday, October 30, 11. What you will learn ‣ Declarativeness ‣ Extensibility](https://reader033.vdocuments.site/reader033/viewer/2022060523/60522ab6c9c5dd797d5121de/html5/thumbnails/3.jpg)
Intro
Sunday, October 30, 11
![Page 4: Enter the Gradle - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/enter-the-gradle.pdf · Enter the Gradle Sunday, October 30, 11. What you will learn ‣ Declarativeness ‣ Extensibility](https://reader033.vdocuments.site/reader033/viewer/2022060523/60522ab6c9c5dd797d5121de/html5/thumbnails/4.jpg)
What is Gradle?
‣ A general purpose build system
‣ Groovy DSL with a Java core.
‣ Provides build-in support for Java, Groovy, Scala, Web, OSGi, EAR and many more types.
‣ Exciting solutions for many of the big pain points you often have with current build systems. – Maintainability– Performance– Usability
Sunday, October 30, 11
![Page 5: Enter the Gradle - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/enter-the-gradle.pdf · Enter the Gradle Sunday, October 30, 11. What you will learn ‣ Declarativeness ‣ Extensibility](https://reader033.vdocuments.site/reader033/viewer/2022060523/60522ab6c9c5dd797d5121de/html5/thumbnails/5.jpg)
Gradle Project Background
‣ Very active community (mailing-list, patches, issues)
‣ Apache v2 license.
‣ Excellent user’s guide (300 pages) + many samples
‣ Excellent DSL reference
‣ Frequent releases, multiple commits per day
‣ Quality is king: ‣ 4500 unit tests, Many hundreds of integration test
‣ Healthy codebase
‣ low defect rate
‣ New Committers and Gradleware Employees:‣ Szczepan Faber (Mr. Mockito)
‣ Peter Niederwieser (Mr. Spock)
‣ Luke Daley (Grails committer and Geb Founder)
‣ Daz DeBoer (Original contributor to Selenium and Ant)Sunday, October 30, 11
![Page 6: Enter the Gradle - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/enter-the-gradle.pdf · Enter the Gradle Sunday, October 30, 11. What you will learn ‣ Declarativeness ‣ Extensibility](https://reader033.vdocuments.site/reader033/viewer/2022060523/60522ab6c9c5dd797d5121de/html5/thumbnails/6.jpg)
Sunday, October 30, 11
![Page 7: Enter the Gradle - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/enter-the-gradle.pdf · Enter the Gradle Sunday, October 30, 11. What you will learn ‣ Declarativeness ‣ Extensibility](https://reader033.vdocuments.site/reader033/viewer/2022060523/60522ab6c9c5dd797d5121de/html5/thumbnails/7.jpg)
Community Portal
‣ Forum: forums.gradle.org
‣ Keep up to date: This Week in Gradle
‣ Roadmap: gradle.org/roadmap
Sunday, October 30, 11
![Page 8: Enter the Gradle - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/enter-the-gradle.pdf · Enter the Gradle Sunday, October 30, 11. What you will learn ‣ Declarativeness ‣ Extensibility](https://reader033.vdocuments.site/reader033/viewer/2022060523/60522ab6c9c5dd797d5121de/html5/thumbnails/8.jpg)
Gradle isDeclarative
Sunday, October 30, 11
![Page 9: Enter the Gradle - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/enter-the-gradle.pdf · Enter the Gradle Sunday, October 30, 11. What you will learn ‣ Declarativeness ‣ Extensibility](https://reader033.vdocuments.site/reader033/viewer/2022060523/60522ab6c9c5dd797d5121de/html5/thumbnails/9.jpg)
Declarative
You specify the WHAT
Gradle figures out the HOW
Sunday, October 30, 11
![Page 10: Enter the Gradle - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/enter-the-gradle.pdf · Enter the Gradle Sunday, October 30, 11. What you will learn ‣ Declarativeness ‣ Extensibility](https://reader033.vdocuments.site/reader033/viewer/2022060523/60522ab6c9c5dd797d5121de/html5/thumbnails/10.jpg)
LabsDemo - Source Sets
Sunday, October 30, 11
![Page 11: Enter the Gradle - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/enter-the-gradle.pdf · Enter the Gradle Sunday, October 30, 11. What you will learn ‣ Declarativeness ‣ Extensibility](https://reader033.vdocuments.site/reader033/viewer/2022060523/60522ab6c9c5dd797d5121de/html5/thumbnails/11.jpg)
Gradle is
declarativewithout
being rigid
Sunday, October 30, 11
![Page 12: Enter the Gradle - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/enter-the-gradle.pdf · Enter the Gradle Sunday, October 30, 11. What you will learn ‣ Declarativeness ‣ Extensibility](https://reader033.vdocuments.site/reader033/viewer/2022060523/60522ab6c9c5dd797d5121de/html5/thumbnails/12.jpg)
Extensible Build Language
vs.
Build Framework
Sunday, October 30, 11
![Page 13: Enter the Gradle - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/enter-the-gradle.pdf · Enter the Gradle Sunday, October 30, 11. What you will learn ‣ Declarativeness ‣ Extensibility](https://reader033.vdocuments.site/reader033/viewer/2022060523/60522ab6c9c5dd797d5121de/html5/thumbnails/13.jpg)
usePlugin ‘editions’
productEditions {enterprise core, plugins, powerAddonspublic core, plugins, openApi
}
Custom Language Elements
>gradle enterpriseEditionZip
>gradle publicEditionTar
Sunday, October 30, 11
![Page 14: Enter the Gradle - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/enter-the-gradle.pdf · Enter the Gradle Sunday, October 30, 11. What you will learn ‣ Declarativeness ‣ Extensibility](https://reader033.vdocuments.site/reader033/viewer/2022060523/60522ab6c9c5dd797d5121de/html5/thumbnails/14.jpg)
SpringOne 2GX 2009. All rights reserved. Do not distribute without permission.
Sunday, October 30, 11
![Page 15: Enter the Gradle - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/enter-the-gradle.pdf · Enter the Gradle Sunday, October 30, 11. What you will learn ‣ Declarativeness ‣ Extensibility](https://reader033.vdocuments.site/reader033/viewer/2022060523/60522ab6c9c5dd797d5121de/html5/thumbnails/15.jpg)
SpringOne 2GX 2009. All rights reserved. Do not distribute without permission.
Sunday, October 30, 11
![Page 16: Enter the Gradle - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/enter-the-gradle.pdf · Enter the Gradle Sunday, October 30, 11. What you will learn ‣ Declarativeness ‣ Extensibility](https://reader033.vdocuments.site/reader033/viewer/2022060523/60522ab6c9c5dd797d5121de/html5/thumbnails/16.jpg)
Extensible
Sunday, October 30, 11
![Page 17: Enter the Gradle - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/enter-the-gradle.pdf · Enter the Gradle Sunday, October 30, 11. What you will learn ‣ Declarativeness ‣ Extensibility](https://reader033.vdocuments.site/reader033/viewer/2022060523/60522ab6c9c5dd797d5121de/html5/thumbnails/17.jpg)
Directed Acyclic Graph (DAG)
‣ Each task to be executed is a node.
‣ The dependsOn relations define directed edges.
‣ No cycles are allowed (acyclic)
‣ Each task is executed once and only once.
‣ Execution order is against the edge directions.
Sunday, October 30, 11
![Page 18: Enter the Gradle - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/enter-the-gradle.pdf · Enter the Gradle Sunday, October 30, 11. What you will learn ‣ Declarativeness ‣ Extensibility](https://reader033.vdocuments.site/reader033/viewer/2022060523/60522ab6c9c5dd797d5121de/html5/thumbnails/18.jpg)
Expect the unexpected
‣ Custom Language Elements
‣ Deep Configuration API
‣ Deep Execution API
‣ Rich API
‣ Extendable Domain Objects
‣ Custom Tasks
‣ Custom Plugins
Sunday, October 30, 11
![Page 19: Enter the Gradle - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/enter-the-gradle.pdf · Enter the Gradle Sunday, October 30, 11. What you will learn ‣ Declarativeness ‣ Extensibility](https://reader033.vdocuments.site/reader033/viewer/2022060523/60522ab6c9c5dd797d5121de/html5/thumbnails/19.jpg)
LabsDemo - Task Rules
Sunday, October 30, 11
![Page 20: Enter the Gradle - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/enter-the-gradle.pdf · Enter the Gradle Sunday, October 30, 11. What you will learn ‣ Declarativeness ‣ Extensibility](https://reader033.vdocuments.site/reader033/viewer/2022060523/60522ab6c9c5dd797d5121de/html5/thumbnails/20.jpg)
Groovy vs.XML
Sunday, October 30, 11
![Page 21: Enter the Gradle - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/enter-the-gradle.pdf · Enter the Gradle Sunday, October 30, 11. What you will learn ‣ Declarativeness ‣ Extensibility](https://reader033.vdocuments.site/reader033/viewer/2022060523/60522ab6c9c5dd797d5121de/html5/thumbnails/21.jpg)
It’s the design, stupid!
Sunday, October 30, 11
![Page 22: Enter the Gradle - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/enter-the-gradle.pdf · Enter the Gradle Sunday, October 30, 11. What you will learn ‣ Declarativeness ‣ Extensibility](https://reader033.vdocuments.site/reader033/viewer/2022060523/60522ab6c9c5dd797d5121de/html5/thumbnails/22.jpg)
Pleaseno
messybuild scripts
Sunday, October 30, 11
![Page 23: Enter the Gradle - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/enter-the-gradle.pdf · Enter the Gradle Sunday, October 30, 11. What you will learn ‣ Declarativeness ‣ Extensibility](https://reader033.vdocuments.site/reader033/viewer/2022060523/60522ab6c9c5dd797d5121de/html5/thumbnails/23.jpg)
Performance
Sunday, October 30, 11
![Page 24: Enter the Gradle - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/enter-the-gradle.pdf · Enter the Gradle Sunday, October 30, 11. What you will learn ‣ Declarativeness ‣ Extensibility](https://reader033.vdocuments.site/reader033/viewer/2022060523/60522ab6c9c5dd797d5121de/html5/thumbnails/24.jpg)
LabsDemo-Excluding Tasks
Sunday, October 30, 11
![Page 25: Enter the Gradle - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/enter-the-gradle.pdf · Enter the Gradle Sunday, October 30, 11. What you will learn ‣ Declarativeness ‣ Extensibility](https://reader033.vdocuments.site/reader033/viewer/2022060523/60522ab6c9c5dd797d5121de/html5/thumbnails/25.jpg)
Smart Exclusion
>gradle A -x B
Sunday, October 30, 11
![Page 26: Enter the Gradle - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/enter-the-gradle.pdf · Enter the Gradle Sunday, October 30, 11. What you will learn ‣ Declarativeness ‣ Extensibility](https://reader033.vdocuments.site/reader033/viewer/2022060523/60522ab6c9c5dd797d5121de/html5/thumbnails/26.jpg)
TaskInput/Output
Sunday, October 30, 11
![Page 27: Enter the Gradle - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/enter-the-gradle.pdf · Enter the Gradle Sunday, October 30, 11. What you will learn ‣ Declarativeness ‣ Extensibility](https://reader033.vdocuments.site/reader033/viewer/2022060523/60522ab6c9c5dd797d5121de/html5/thumbnails/27.jpg)
LabsDemo-Incremental Build
Sunday, October 30, 11
![Page 28: Enter the Gradle - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/enter-the-gradle.pdf · Enter the Gradle Sunday, October 30, 11. What you will learn ‣ Declarativeness ‣ Extensibility](https://reader033.vdocuments.site/reader033/viewer/2022060523/60522ab6c9c5dd797d5121de/html5/thumbnails/28.jpg)
Should clean be required for a reliable build?
(Hint: We have the 21st century)
Sunday, October 30, 11
![Page 29: Enter the Gradle - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/enter-the-gradle.pdf · Enter the Gradle Sunday, October 30, 11. What you will learn ‣ Declarativeness ‣ Extensibility](https://reader033.vdocuments.site/reader033/viewer/2022060523/60522ab6c9c5dd797d5121de/html5/thumbnails/29.jpg)
Task Input/Output
‣ You can describe:‣ Input/Output Files
‣ Input/Output Dirs
‣ Input Properties
‣ Gradle’s build-in tasks all describe their input/output.
Sunday, October 30, 11
![Page 30: Enter the Gradle - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/enter-the-gradle.pdf · Enter the Gradle Sunday, October 30, 11. What you will learn ‣ Declarativeness ‣ Extensibility](https://reader033.vdocuments.site/reader033/viewer/2022060523/60522ab6c9c5dd797d5121de/html5/thumbnails/30.jpg)
Incremental Build
‣ The hashes of the input/output files are cached.
‣ The hashes for all files of the input dirs are cached.
‣ The property values are cached (serialized).
‣ Cache == Current -> Skip Task
Sunday, October 30, 11
![Page 31: Enter the Gradle - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/enter-the-gradle.pdf · Enter the Gradle Sunday, October 30, 11. What you will learn ‣ Declarativeness ‣ Extensibility](https://reader033.vdocuments.site/reader033/viewer/2022060523/60522ab6c9c5dd797d5121de/html5/thumbnails/31.jpg)
class MyTask extends DefaultTask { @InputFile File text @InputFiles FileCollection path @InputDirectory File templates @Input String mode @OutputFile File result @OutputDirectory transformedTemplates File someProp // ignored @TaskAction generate() { ... } }
Annotations
Sunday, October 30, 11
![Page 32: Enter the Gradle - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/enter-the-gradle.pdf · Enter the Gradle Sunday, October 30, 11. What you will learn ‣ Declarativeness ‣ Extensibility](https://reader033.vdocuments.site/reader033/viewer/2022060523/60522ab6c9c5dd797d5121de/html5/thumbnails/32.jpg)
ant.import 'build.xml' someAntTarget { inputs.files 'template.tm',new File('data.txt') inputs.dir 'someDir' outputs.files 'output.txt' outputs.dir 'generatedFilesDir' outputs.upToDateWhen { task -> dbDataUpToDate(task.dbUrl) } }
Input/Output API
Sunday, October 30, 11
![Page 33: Enter the Gradle - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/enter-the-gradle.pdf · Enter the Gradle Sunday, October 30, 11. What you will learn ‣ Declarativeness ‣ Extensibility](https://reader033.vdocuments.site/reader033/viewer/2022060523/60522ab6c9c5dd797d5121de/html5/thumbnails/33.jpg)
Property Processing
‣ Exception if input files/dir do not exists‣ Disable validation with @Optional
‣ Output dirs are created before execution.
Sunday, October 30, 11
![Page 34: Enter the Gradle - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/enter-the-gradle.pdf · Enter the Gradle Sunday, October 30, 11. What you will learn ‣ Declarativeness ‣ Extensibility](https://reader033.vdocuments.site/reader033/viewer/2022060523/60522ab6c9c5dd797d5121de/html5/thumbnails/34.jpg)
Performance
‣ Incremental Build
‣ Parallel Testing
‣ Soon: Parallel Builds, Distributed testing/builds
‣ Rich Model
Sunday, October 30, 11
![Page 35: Enter the Gradle - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/enter-the-gradle.pdf · Enter the Gradle Sunday, October 30, 11. What you will learn ‣ Declarativeness ‣ Extensibility](https://reader033.vdocuments.site/reader033/viewer/2022060523/60522ab6c9c5dd797d5121de/html5/thumbnails/35.jpg)
Integration
Sunday, October 30, 11
![Page 36: Enter the Gradle - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/enter-the-gradle.pdf · Enter the Gradle Sunday, October 30, 11. What you will learn ‣ Declarativeness ‣ Extensibility](https://reader033.vdocuments.site/reader033/viewer/2022060523/60522ab6c9c5dd797d5121de/html5/thumbnails/36.jpg)
Ant
Sunday, October 30, 11
![Page 37: Enter the Gradle - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/enter-the-gradle.pdf · Enter the Gradle Sunday, October 30, 11. What you will learn ‣ Declarativeness ‣ Extensibility](https://reader033.vdocuments.site/reader033/viewer/2022060523/60522ab6c9c5dd797d5121de/html5/thumbnails/37.jpg)
Ant
‣ Ant is Gradle's friend not its competitor.
‣ Gradle uses Ant task's internally.
‣ You can use any Ant task from Gradle.
‣ Ant tasks are an integral part of Gradle.
‣ Gradle ships with Ant.
‣ You can import any Ant build into Gradle
Sunday, October 30, 11
![Page 38: Enter the Gradle - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/enter-the-gradle.pdf · Enter the Gradle Sunday, October 30, 11. What you will learn ‣ Declarativeness ‣ Extensibility](https://reader033.vdocuments.site/reader033/viewer/2022060523/60522ab6c9c5dd797d5121de/html5/thumbnails/38.jpg)
ant.delete dir: 'someDir' ant { ftp(server: "ftp.comp.org", userid: 'me', ...) { fileset(dir: "htdocs/manual") { include name: "**/*.html" } // high end myFileTree.addToAntBuilder(ant, 'fileset') } mkdir dir: 'someDir' }
Ant Tasks
‣ Gradle provides an instance of the Groovy AntBuilder
Sunday, October 30, 11
![Page 39: Enter the Gradle - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/enter-the-gradle.pdf · Enter the Gradle Sunday, October 30, 11. What you will learn ‣ Declarativeness ‣ Extensibility](https://reader033.vdocuments.site/reader033/viewer/2022060523/60522ab6c9c5dd797d5121de/html5/thumbnails/39.jpg)
<project> <target name="hello" depends="intro"> <echo>Hello, from Ant</echo> </target> </project>
Importing Ant Builds
ant.importBuild 'build.xml' hello.doFirst { println 'Here comes Ant' } task intro << { println 'Hello, from Gradle'}
>gradle helloHello, from GradleHere comes Ant[ant:echo] Hello, from Ant
Sunday, October 30, 11
![Page 40: Enter the Gradle - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/enter-the-gradle.pdf · Enter the Gradle Sunday, October 30, 11. What you will learn ‣ Declarativeness ‣ Extensibility](https://reader033.vdocuments.site/reader033/viewer/2022060523/60522ab6c9c5dd797d5121de/html5/thumbnails/40.jpg)
Maven
Sunday, October 30, 11
![Page 41: Enter the Gradle - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/enter-the-gradle.pdf · Enter the Gradle Sunday, October 30, 11. What you will learn ‣ Declarativeness ‣ Extensibility](https://reader033.vdocuments.site/reader033/viewer/2022060523/60522ab6c9c5dd797d5121de/html5/thumbnails/41.jpg)
LabsDemo-Maven Import
Sunday, October 30, 11
![Page 42: Enter the Gradle - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/enter-the-gradle.pdf · Enter the Gradle Sunday, October 30, 11. What you will learn ‣ Declarativeness ‣ Extensibility](https://reader033.vdocuments.site/reader033/viewer/2022060523/60522ab6c9c5dd797d5121de/html5/thumbnails/42.jpg)
Maven
‣ Retrieve/Deploy to Maven/Ivy repositories
‣ Autogeneration of pom.xml/ivy.xml
‣ Convert Maven build into build.gradle
‣ Import of Maven builds‣ Soon: Deep Import
‣ Soon: Use Gradle from Maven
Sunday, October 30, 11
![Page 43: Enter the Gradle - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/enter-the-gradle.pdf · Enter the Gradle Sunday, October 30, 11. What you will learn ‣ Declarativeness ‣ Extensibility](https://reader033.vdocuments.site/reader033/viewer/2022060523/60522ab6c9c5dd797d5121de/html5/thumbnails/43.jpg)
Ecosystem‣ Deep Integration with Artifactory
‣ Nexus
‣ Jenkins/Hudson
‣ Teamcity
‣ Eclipse (via STS)
‣ Idea 11
‣ Sonar
Sunday, October 30, 11
![Page 44: Enter the Gradle - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/enter-the-gradle.pdf · Enter the Gradle Sunday, October 30, 11. What you will learn ‣ Declarativeness ‣ Extensibility](https://reader033.vdocuments.site/reader033/viewer/2022060523/60522ab6c9c5dd797d5121de/html5/thumbnails/44.jpg)
Migration
Sunday, October 30, 11
![Page 45: Enter the Gradle - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/enter-the-gradle.pdf · Enter the Gradle Sunday, October 30, 11. What you will learn ‣ Declarativeness ‣ Extensibility](https://reader033.vdocuments.site/reader033/viewer/2022060523/60522ab6c9c5dd797d5121de/html5/thumbnails/45.jpg)
Build Migration
‣ Mission Critical!
‣ Nightmare if the new build system can’t adapt to the existing project layout:‣ Freeze
‣ Project automation not working for a while
‣ Different branches (unreliable, hard to compare, ...)
‣ Gradle’s suppleness enables baby steps.‣ Gradle can adapt to any project layout.
‣ No separate branches
‣ Comparable --> Write tests
Sunday, October 30, 11
![Page 46: Enter the Gradle - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/enter-the-gradle.pdf · Enter the Gradle Sunday, October 30, 11. What you will learn ‣ Declarativeness ‣ Extensibility](https://reader033.vdocuments.site/reader033/viewer/2022060523/60522ab6c9c5dd797d5121de/html5/thumbnails/46.jpg)
EnterpriseDependency
Cache
Sunday, October 30, 11
![Page 47: Enter the Gradle - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/enter-the-gradle.pdf · Enter the Gradle Sunday, October 30, 11. What you will learn ‣ Declarativeness ‣ Extensibility](https://reader033.vdocuments.site/reader033/viewer/2022060523/60522ab6c9c5dd797d5121de/html5/thumbnails/47.jpg)
Wharf
‣ Contribution by Fred Simon, Chief Architect JFrog (Artifactory).
‣ Metadata cache per resolver (url = id)
‣ Global checksum cache for jars
Sunday, October 30, 11
![Page 48: Enter the Gradle - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/enter-the-gradle.pdf · Enter the Gradle Sunday, October 30, 11. What you will learn ‣ Declarativeness ‣ Extensibility](https://reader033.vdocuments.site/reader033/viewer/2022060523/60522ab6c9c5dd797d5121de/html5/thumbnails/48.jpg)
Usecases
‣ Repository Change:‣ A new metadata cache is created
‣ Check for Jar‣ If not there, Exception:
‣ If checksum OK no download
‣ No inconsistencies between cache and repository.
‣ Dynamic revisions are retrieved per repository.
‣ Local installs don’t pollute other builds.
Sunday, October 30, 11
![Page 49: Enter the Gradle - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/enter-the-gradle.pdf · Enter the Gradle Sunday, October 30, 11. What you will learn ‣ Declarativeness ‣ Extensibility](https://reader033.vdocuments.site/reader033/viewer/2022060523/60522ab6c9c5dd797d5121de/html5/thumbnails/49.jpg)
Benefits
‣ Local Cache is not hiding problems
‣ Local Cache is not creating special behaviour
‣ Better Reproducability.
‣ Transactional
‣ Unique offering by Gradle
Sunday, October 30, 11
![Page 50: Enter the Gradle - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/enter-the-gradle.pdf · Enter the Gradle Sunday, October 30, 11. What you will learn ‣ Declarativeness ‣ Extensibility](https://reader033.vdocuments.site/reader033/viewer/2022060523/60522ab6c9c5dd797d5121de/html5/thumbnails/50.jpg)
Testing
Sunday, October 30, 11
![Page 51: Enter the Gradle - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/enter-the-gradle.pdf · Enter the Gradle Sunday, October 30, 11. What you will learn ‣ Declarativeness ‣ Extensibility](https://reader033.vdocuments.site/reader033/viewer/2022060523/60522ab6c9c5dd797d5121de/html5/thumbnails/51.jpg)
Test Task
‣ Support for JUnit and TestNG
‣ Parallel Testing
‣ Custom Fork Frequency
‣ Remote Listeners
‣ Tests auto-detected in sourceSets.test.classes
Name
Type
Input
test
Test
sourceSets.test.classesconfigurations.testRuntime
Sunday, October 30, 11
![Page 52: Enter the Gradle - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/enter-the-gradle.pdf · Enter the Gradle Sunday, October 30, 11. What you will learn ‣ Declarativeness ‣ Extensibility](https://reader033.vdocuments.site/reader033/viewer/2022060523/60522ab6c9c5dd797d5121de/html5/thumbnails/52.jpg)
test { jvmArgs: ["-Xmx512M"] include "**/tests/special/**/*Test.class" exclude "**/Old*Test.class" forkEvery = 30 maxParallelForks = guessMaxForks() } def guessMaxForks() { int processors = Runtime.runtime.availableProcessors() return Math.max(2, (int) (processors / 2)) }
Test Task Example
Disables Auto Detection
Sunday, October 30, 11
![Page 53: Enter the Gradle - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/enter-the-gradle.pdf · Enter the Gradle Sunday, October 30, 11. What you will learn ‣ Declarativeness ‣ Extensibility](https://reader033.vdocuments.site/reader033/viewer/2022060523/60522ab6c9c5dd797d5121de/html5/thumbnails/53.jpg)
test { beforeTest { descr -> // do something } afterTest { descr, result -> // do something } afterSuite { descr, result -> // do something } }
Test Task Listeners
Sunday, October 30, 11
![Page 54: Enter the Gradle - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/enter-the-gradle.pdf · Enter the Gradle Sunday, October 30, 11. What you will learn ‣ Declarativeness ‣ Extensibility](https://reader033.vdocuments.site/reader033/viewer/2022060523/60522ab6c9c5dd797d5121de/html5/thumbnails/54.jpg)
LabsDemo - Testing
Sunday, October 30, 11
![Page 55: Enter the Gradle - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/enter-the-gradle.pdf · Enter the Gradle Sunday, October 30, 11. What you will learn ‣ Declarativeness ‣ Extensibility](https://reader033.vdocuments.site/reader033/viewer/2022060523/60522ab6c9c5dd797d5121de/html5/thumbnails/55.jpg)
Discoverability
Sunday, October 30, 11
![Page 56: Enter the Gradle - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/enter-the-gradle.pdf · Enter the Gradle Sunday, October 30, 11. What you will learn ‣ Declarativeness ‣ Extensibility](https://reader033.vdocuments.site/reader033/viewer/2022060523/60522ab6c9c5dd797d5121de/html5/thumbnails/56.jpg)
Lifecycle Tasks
‣ The relevant tasks for a build user.
‣ Achieve a certain stage in the build lifecycle for a project.‣ clean
‣ classes
‣ test
‣ assemble
‣ check
‣ build (depends on assemble and check)
‣ Hooks for worker tasks.
Sunday, October 30, 11
![Page 57: Enter the Gradle - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/enter-the-gradle.pdf · Enter the Gradle Sunday, October 30, 11. What you will learn ‣ Declarativeness ‣ Extensibility](https://reader033.vdocuments.site/reader033/viewer/2022060523/60522ab6c9c5dd797d5121de/html5/thumbnails/57.jpg)
LabsLab 19-Discoverability
Sunday, October 30, 11
![Page 58: Enter the Gradle - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/enter-the-gradle.pdf · Enter the Gradle Sunday, October 30, 11. What you will learn ‣ Declarativeness ‣ Extensibility](https://reader033.vdocuments.site/reader033/viewer/2022060523/60522ab6c9c5dd797d5121de/html5/thumbnails/58.jpg)
MultiprojectBuilds
Sunday, October 30, 11
![Page 59: Enter the Gradle - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/enter-the-gradle.pdf · Enter the Gradle Sunday, October 30, 11. What you will learn ‣ Declarativeness ‣ Extensibility](https://reader033.vdocuments.site/reader033/viewer/2022060523/60522ab6c9c5dd797d5121de/html5/thumbnails/59.jpg)
Multi-Project Builds
‣ Arbitrary Multiproject Layout
‣ Configuration Injection
‣ Project Dependencies & Partial builds
‣ Separate Config/Execution Hierarchy
Sunday, October 30, 11
![Page 60: Enter the Gradle - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/enter-the-gradle.pdf · Enter the Gradle Sunday, October 30, 11. What you will learn ‣ Declarativeness ‣ Extensibility](https://reader033.vdocuments.site/reader033/viewer/2022060523/60522ab6c9c5dd797d5121de/html5/thumbnails/60.jpg)
subprojects { apply plugin: 'java' dependencies { compile "commons-lang:commons-lang:3.1" testCompile "junit:junit:4.4" } test { jvmArgs: ['Xmx512M'] } }
Configuration Injection
‣ ultimateApp‣ api
‣ webservice
‣ shared
Sunday, October 30, 11
![Page 61: Enter the Gradle - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/enter-the-gradle.pdf · Enter the Gradle Sunday, October 30, 11. What you will learn ‣ Declarativeness ‣ Extensibility](https://reader033.vdocuments.site/reader033/viewer/2022060523/60522ab6c9c5dd797d5121de/html5/thumbnails/61.jpg)
configure(nonWebProjects()) { jar.manifest.attributes Implementor: 'Gradle-Inc' } def nonWebProjects() { subprojects.findAll {project -> !project.name.startsWith('web') } }
Filtered Injection
‣ ultimateApp‣ api
‣ webservice
‣ shared
Sunday, October 30, 11
![Page 62: Enter the Gradle - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/enter-the-gradle.pdf · Enter the Gradle Sunday, October 30, 11. What you will learn ‣ Declarativeness ‣ Extensibility](https://reader033.vdocuments.site/reader033/viewer/2022060523/60522ab6c9c5dd797d5121de/html5/thumbnails/62.jpg)
dependencies { compile "commons-lang:commons-lang:3.1", project(':shared') }
Project Dependencies
‣ ultimateApp‣ api
‣ webservice
‣ shared
First Class Citizen
Sunday, October 30, 11
![Page 63: Enter the Gradle - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/enter-the-gradle.pdf · Enter the Gradle Sunday, October 30, 11. What you will learn ‣ Declarativeness ‣ Extensibility](https://reader033.vdocuments.site/reader033/viewer/2022060523/60522ab6c9c5dd797d5121de/html5/thumbnails/63.jpg)
Partial Builds
‣ ultimateApp‣ api
‣ webservice
‣ shared
>gradle build>gradle buildDependents>gradle buildNeeded
Sunday, October 30, 11
![Page 64: Enter the Gradle - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/enter-the-gradle.pdf · Enter the Gradle Sunday, October 30, 11. What you will learn ‣ Declarativeness ‣ Extensibility](https://reader033.vdocuments.site/reader033/viewer/2022060523/60522ab6c9c5dd797d5121de/html5/thumbnails/64.jpg)
There isno one-size-fits-all
project structurefor the
enterprise.
Sunday, October 30, 11
![Page 65: Enter the Gradle - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/enter-the-gradle.pdf · Enter the Gradle Sunday, October 30, 11. What you will learn ‣ Declarativeness ‣ Extensibility](https://reader033.vdocuments.site/reader033/viewer/2022060523/60522ab6c9c5dd797d5121de/html5/thumbnails/65.jpg)
The physicalstructure of your projects should
be determined byyour
requirements.
Sunday, October 30, 11
![Page 66: Enter the Gradle - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/enter-the-gradle.pdf · Enter the Gradle Sunday, October 30, 11. What you will learn ‣ Declarativeness ‣ Extensibility](https://reader033.vdocuments.site/reader033/viewer/2022060523/60522ab6c9c5dd797d5121de/html5/thumbnails/66.jpg)
include 'project1','project2','project2:child1'
// Everything is configurable rootProject.name = 'main' project(':project1').projectDir = '/myLocation' project(':project1').buildFileName = 'project1.gradle'
Defining a Multi Project Build
‣ settings.gradle (location defines root).
‣ root project is implicitly included
Defines a virtual hierarchy By default maps to file path <root>/project1
Default to root dir name
Default to build.gradle
Sunday, October 30, 11
![Page 67: Enter the Gradle - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/enter-the-gradle.pdf · Enter the Gradle Sunday, October 30, 11. What you will learn ‣ Declarativeness ‣ Extensibility](https://reader033.vdocuments.site/reader033/viewer/2022060523/60522ab6c9c5dd797d5121de/html5/thumbnails/67.jpg)
LabsLab 20-Multi-Project Build
Sunday, October 30, 11
![Page 68: Enter the Gradle - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/enter-the-gradle.pdf · Enter the Gradle Sunday, October 30, 11. What you will learn ‣ Declarativeness ‣ Extensibility](https://reader033.vdocuments.site/reader033/viewer/2022060523/60522ab6c9c5dd797d5121de/html5/thumbnails/68.jpg)
Wrapper
Sunday, October 30, 11
![Page 69: Enter the Gradle - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/enter-the-gradle.pdf · Enter the Gradle Sunday, October 30, 11. What you will learn ‣ Declarativeness ‣ Extensibility](https://reader033.vdocuments.site/reader033/viewer/2022060523/60522ab6c9c5dd797d5121de/html5/thumbnails/69.jpg)
task wrapper(type: Wrapper) { gradleVersion = '0.6' jarPath = 'gradle' }
Wrapper Task
‣ Wrapper task generates:‣ wrapper scripts
‣ wrapper jar
‣ wrapper properties.
Sunday, October 30, 11
![Page 70: Enter the Gradle - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/enter-the-gradle.pdf · Enter the Gradle Sunday, October 30, 11. What you will learn ‣ Declarativeness ‣ Extensibility](https://reader033.vdocuments.site/reader033/viewer/2022060523/60522ab6c9c5dd797d5121de/html5/thumbnails/70.jpg)
Wrapper Files
>./gradlew assemble
Sunday, October 30, 11
![Page 71: Enter the Gradle - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/enter-the-gradle.pdf · Enter the Gradle Sunday, October 30, 11. What you will learn ‣ Declarativeness ‣ Extensibility](https://reader033.vdocuments.site/reader033/viewer/2022060523/60522ab6c9c5dd797d5121de/html5/thumbnails/71.jpg)
C/C++
Sunday, October 30, 11
![Page 72: Enter the Gradle - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/enter-the-gradle.pdf · Enter the Gradle Sunday, October 30, 11. What you will learn ‣ Declarativeness ‣ Extensibility](https://reader033.vdocuments.site/reader033/viewer/2022060523/60522ab6c9c5dd797d5121de/html5/thumbnails/72.jpg)
LabsDemo - C/C++
Sunday, October 30, 11
![Page 73: Enter the Gradle - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/enter-the-gradle.pdf · Enter the Gradle Sunday, October 30, 11. What you will learn ‣ Declarativeness ‣ Extensibility](https://reader033.vdocuments.site/reader033/viewer/2022060523/60522ab6c9c5dd797d5121de/html5/thumbnails/73.jpg)
Sonar
Sunday, October 30, 11
![Page 74: Enter the Gradle - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/enter-the-gradle.pdf · Enter the Gradle Sunday, October 30, 11. What you will learn ‣ Declarativeness ‣ Extensibility](https://reader033.vdocuments.site/reader033/viewer/2022060523/60522ab6c9c5dd797d5121de/html5/thumbnails/74.jpg)
LabsDemo - Sonar
Sunday, October 30, 11
![Page 75: Enter the Gradle - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/enter-the-gradle.pdf · Enter the Gradle Sunday, October 30, 11. What you will learn ‣ Declarativeness ‣ Extensibility](https://reader033.vdocuments.site/reader033/viewer/2022060523/60522ab6c9c5dd797d5121de/html5/thumbnails/75.jpg)
Series of UI Products
‣ Commercial Web Apps for the Enterprise
‣ First Product: Discovery (Working Title)
‣ Build Optimization‣ Metrics for CI and Dev builds
‣ Get the average build time down
‣ Get as much feedback before the commit
Sunday, October 30, 11
![Page 76: Enter the Gradle - jug-karlsruhe.dejug-karlsruhe.de/assets/slides/enter-the-gradle.pdf · Enter the Gradle Sunday, October 30, 11. What you will learn ‣ Declarativeness ‣ Extensibility](https://reader033.vdocuments.site/reader033/viewer/2022060523/60522ab6c9c5dd797d5121de/html5/thumbnails/76.jpg)
Q & A
Sunday, October 30, 11