Rocking the Gradle! -...

80
Hans Dockter CEO, Gradleware Founder Gradle [email protected] Rocking the Gradle! Saturday, July 7, 12

Transcript of Rocking the Gradle! -...

Page 1: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

Hans DockterCEO, GradlewareFounder [email protected]

Rocking the Gradle!

Saturday, July 7, 12

Page 2: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

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

Saturday, July 7, 12

Page 3: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

Intro

Saturday, July 7, 12

Page 4: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

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, C/C++ and many more types. 

‣ Exciting solutions for many of the big pain points you often have with current build systems. – Maintainability– Performance– Usability– Extendability– Standardization

Saturday, July 7, 12

Page 5: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

Gradle Project Background

‣ Very active community (forum, 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)Saturday, July 7, 12

Page 6: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

Saturday, July 7, 12

Page 7: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

Community Portal

‣ Forum: forums.gradle.org

‣ Keep up to date: This Week in Gradle

‣ Roadmap: gradle.org/roadmap

Saturday, July 7, 12

Page 8: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

Training

25.  –  27.  Sep.  2012  Frankfurt23.  –  25.  Okt.  2012  London

Sie  erhalten  einen  Raba$  von  20%  auf  die  Teilnehmergebühr,  wenn  Sie  sich  mit  dem  JFS-­‐Code  innerhalb  der  nächsten  30-­‐Tage  online  auf  www.gradleware.com/training  registrieren.    Fragen  Sie  uns  nach  dem  JFS-­‐RabaBcode!

Saturday, July 7, 12

Page 9: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

Free  Webinars

A  gentle  introduc.on  to  Gradle  –  with  Tim  Berglund11.  Juli  2012  um  19:00  Uhr  (MESZ)

In-­‐depth  Gradle  1.0  Power  Features  –  with  Szczepan  Faber12.  Juli  2012  um  11:00  Uhr  (MESZ)

Administering  Gradle  in  the  Enterprise      –  with  Luke  Daley31.  Juli  2012  um  11:00  Uhr  (MESZ)

Migra.ng  and  Upgrading  with  Gradle  –  with  Szczepan  Faber9.  August  2012  um  11:00  Uhr  (MESZ)

PDT  =  Pacific  Daylight  Time  /  EDT  =  Eastern  Daylight  Time  /  CEST  =  Central  European  Summer  Time  /  BST  =  BriUsh  Summer  TimeSaturday, July 7, 12

Page 10: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

O‘Reilly-­‐Buch

Das  erste  O‘Reilly-­‐Buch  bietetanschauliche  Beschreibungenund  Beispiele  zur  intensivenBeschäOigung  mit  Gradle

So  finden  Sie  das  Buch:

1. Als  E-­‐Book  auf  shop.oreilly.com

2.Als  Hardcover  im  (Online-­‐)Buchhandel

3.Zum  kostenlosen  Lesen  auf  unserer  

WebsiteSaturday, July 7, 12

Page 11: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

Gradle isDeclarative

Saturday, July 7, 12

Page 12: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

Declarative

You specify the WHAT

Gradle figures out the HOW

Saturday, July 7, 12

Page 13: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

LabsDemo - Source Sets

Saturday, July 7, 12

Page 14: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

<project name="Foo" basedir="."> <property name="classesDir" value="build/classes/test"/> <target name="compileTests"> <javac ... destdir="${classesDir}" ... </javac> </target> <target name="test" depends="compileTests"> <junit ...> <classpath>

<pathelement path="{classesDir}"/></classpath>

</junit> </target> <target name="testJar" depends="compileTests"> <jar basedir="${classesDir}" .../> </target> </project>

An Ant Example

Saturday, July 7, 12

Page 15: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

 Gradle is

declarativewithout

being rigid

Saturday, July 7, 12

Page 16: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

Extensible Build Language

vs.

Build Framework

Saturday, July 7, 12

Page 17: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

usePlugin ‘editions’

productEditions {enterprise core, plugins, powerAddonspublic core, plugins, openApi

}

Custom Language Elements

>gradle enterpriseEditionZip

>gradle publicEditionTar

Saturday, July 7, 12

Page 18: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

SpringOne 2GX 2009. All rights reserved. Do not distribute without permission.

Saturday, July 7, 12

Page 19: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

SpringOne 2GX 2009. All rights reserved. Do not distribute without permission.

Saturday, July 7, 12

Page 20: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

Extensible

Saturday, July 7, 12

Page 21: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

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.

Saturday, July 7, 12

Page 22: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

Expect the unexpected

‣ Custom Language Elements

‣ Deep Configuration API

‣ Deep Execution API

‣ Rich API

‣ Extendable Domain Objects

‣ Custom Tasks

‣ Custom Plugins

Saturday, July 7, 12

Page 23: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

LabsDemo - Task Rules

Saturday, July 7, 12

Page 24: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

Groovy vs.XML

Saturday, July 7, 12

Page 25: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

 It’s the design, stupid!

Saturday, July 7, 12

Page 26: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

Pleaseno

messybuild scripts

Saturday, July 7, 12

Page 27: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

Performance

Saturday, July 7, 12

Page 28: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

LabsDemo-Excluding Tasks

Saturday, July 7, 12

Page 29: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

Smart Exclusion

>gradle A -x B

Saturday, July 7, 12

Page 30: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

TaskInput/Output

Saturday, July 7, 12

Page 31: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

LabsDemo-Incremental Build

Saturday, July 7, 12

Page 32: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

Should clean be required for a reliable build?

(Hint: We have the 21st century)

Saturday, July 7, 12

Page 33: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

Task Input/Output

‣ You can describe:‣ Input/Output Files

‣ Input/Output Dirs

‣ Input Properties

‣ Gradle’s build-in tasks all describe their input/output.

Saturday, July 7, 12

Page 34: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

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

Saturday, July 7, 12

Page 35: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

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

Saturday, July 7, 12

Page 36: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

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

Saturday, July 7, 12

Page 37: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

Property Processing

‣ Exception if input files/dir do not exists‣ Disable validation with @Optional

‣ Output dirs are created before execution.

Saturday, July 7, 12

Page 38: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

Performance

‣ Incremental Build

‣ Parallel Testing

‣ Soon: Parallel Builds, Distributed testing/builds

‣ Rich Model

Saturday, July 7, 12

Page 39: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

Integration

Saturday, July 7, 12

Page 40: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

Ant

Saturday, July 7, 12

Page 41: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

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

Saturday, July 7, 12

Page 42: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

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

Saturday, July 7, 12

Page 43: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

<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

Saturday, July 7, 12

Page 44: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

Maven

Saturday, July 7, 12

Page 45: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

LabsDemo-Maven Import

Saturday, July 7, 12

Page 46: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

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

Saturday, July 7, 12

Page 47: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

Ecosystem‣ Deep Integration with Artifactory

‣ Nexus

‣ Jenkins/Hudson

‣ Teamcity

‣ Eclipse (via STS)

‣ Idea 11

‣ Sonar

Saturday, July 7, 12

Page 48: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

Migration

Saturday, July 7, 12

Page 49: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

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

Saturday, July 7, 12

Page 50: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

EnterpriseDependency

Cache

Saturday, July 7, 12

Page 51: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

New Dependency Cache

‣ Metadata cache per resolver (url = id)

‣ Global checksum cache for jars

‣ Concurrency

‣ Dynamic Versions

‣ SOON: Reuse existing caches (older Gradle versions, m2, ivy)

Saturday, July 7, 12

Page 52: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

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.

‣ Changing modules are retrieved per repository.

‣ Local installs don’t pollute other builds.

Saturday, July 7, 12

Page 53: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

Benefits

‣ Local Cache is not hiding problems

‣ Local Cache is not creating special behaviour

‣ Better Reproducibility.

‣ Transactional

Saturday, July 7, 12

Page 54: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

Testing

Saturday, July 7, 12

Page 55: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

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

Saturday, July 7, 12

Page 56: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

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

Saturday, July 7, 12

Page 57: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

test { beforeTest { descr -> // do something } afterTest { descr, result -> // do something } afterSuite { descr, result -> // do something } }

Test Task Listeners

Saturday, July 7, 12

Page 58: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

LabsDemo - Testing

Saturday, July 7, 12

Page 59: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

Discoverability

Saturday, July 7, 12

Page 60: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

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.

Saturday, July 7, 12

Page 61: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

LabsLab 19-Discoverability

Saturday, July 7, 12

Page 62: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

MultiprojectBuilds

Saturday, July 7, 12

Page 63: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

Multi-Project Builds

‣ Arbitrary Multiproject Layout

‣ Configuration Injection

‣ Project Dependencies & Partial builds

‣ Separate Config/Execution Hierarchy

Saturday, July 7, 12

Page 64: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

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

Saturday, July 7, 12

Page 65: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

configure(nonWebProjects()) { jar.manifest.attributes Implementor: 'Gradle-Inc' } def nonWebProjects() { subprojects.findAll {project -> !project.name.startsWith('web') } }

Filtered Injection

‣ ultimateApp‣ api

‣ webservice

‣ shared

Saturday, July 7, 12

Page 66: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

dependencies { compile "commons-lang:commons-lang:3.1", project(':shared') }

Project Dependencies

‣ ultimateApp‣ api

‣ webservice

‣ shared

First Class Citizen

Saturday, July 7, 12

Page 67: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

Partial Builds

‣ ultimateApp‣ api

‣ webservice

‣ shared

>gradle build>gradle buildDependents>gradle buildNeeded

Saturday, July 7, 12

Page 68: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

There isno one-size-fits-all

project structurefor the

enterprise.

Saturday, July 7, 12

Page 69: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

 The physicalstructure of your projects should

be determined byyour

 requirements.

Saturday, July 7, 12

Page 70: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

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

Saturday, July 7, 12

Page 71: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

LabsLab 20-Multi-Project Build

Saturday, July 7, 12

Page 72: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

Wrapper

Saturday, July 7, 12

Page 73: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

task wrapper(type: Wrapper) { gradleVersion = '0.6' jarPath = 'gradle' }

Wrapper Task

‣ Wrapper task generates:‣ wrapper scripts

‣ wrapper jar

‣ wrapper properties.

Saturday, July 7, 12

Page 74: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

Wrapper Files

>./gradlew assemble

Saturday, July 7, 12

Page 75: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

C/C++

Saturday, July 7, 12

Page 76: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

LabsDemo - C/C++

Saturday, July 7, 12

Page 77: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

Sonar

Saturday, July 7, 12

Page 78: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

LabsDemo - Sonar

Saturday, July 7, 12

Page 79: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

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

Saturday, July 7, 12

Page 80: Rocking the Gradle! - alt.java-forum-stuttgart.dealt.java-forum-stuttgart.de/jfs/2012/folien/C4.pdf · 7/7/2012 · Rocking the Gradle! Saturday, July 7, 12. ... Intro Saturday, July

Q & A

Saturday, July 7, 12