Top Banner
Hans Dockter CEO, Gradleware Founder Gradle [email protected] Rocking the Gradle! Saturday, July 7, 12
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

May 13, 2018

Download

Documents

phamkhanh
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
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