Top Banner
at #bedcon Gradle 2.0 and beyond latest efforts, current status & roadmap
50

Gradle 2.0 and beyond - Berlin Expert Daysbed-con.org/2015/files/slides/gradle_bedcon_2015.pdfDomain modelling is Gradle’s strength. We want it to be even better. Stronger modeling

Mar 23, 2020

Download

Documents

dariahiddleston
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: Gradle 2.0 and beyond - Berlin Expert Daysbed-con.org/2015/files/slides/gradle_bedcon_2015.pdfDomain modelling is Gradle’s strength. We want it to be even better. Stronger modeling

at#bedcon

Gradle2.0andbeyondlatestefforts,currentstatus&roadmap

Page 2: Gradle 2.0 and beyond - Berlin Expert Daysbed-con.org/2015/files/slides/gradle_bedcon_2015.pdfDomain modelling is Gradle’s strength. We want it to be even better. Stronger modeling

at#bedcon

RenéGröschkePrincipalEngineer@GradleInc.

@breskeby

breskeby

[email protected]

Page 3: Gradle 2.0 and beyond - Berlin Expert Daysbed-con.org/2015/files/slides/gradle_bedcon_2015.pdfDomain modelling is Gradle’s strength. We want it to be even better. Stronger modeling

at#bedcon

Gradleinanutshellcompletelyopensource

apache2licensed

drivenbyGradleInc.

Page 4: Gradle 2.0 and beyond - Berlin Expert Daysbed-con.org/2015/files/slides/gradle_bedcon_2015.pdfDomain modelling is Gradle’s strength. We want it to be even better. Stronger modeling

at#bedcon

Gradleinanutshell

Page 5: Gradle 2.0 and beyond - Berlin Expert Daysbed-con.org/2015/files/slides/gradle_bedcon_2015.pdfDomain modelling is Gradle’s strength. We want it to be even better. Stronger modeling

at#bedcon

Gradleinanutshell

Page 6: Gradle 2.0 and beyond - Berlin Expert Daysbed-con.org/2015/files/slides/gradle_bedcon_2015.pdfDomain modelling is Gradle’s strength. We want it to be even better. Stronger modeling

at#bedcon

Gradleinanutshell

Page 7: Gradle 2.0 and beyond - Berlin Expert Daysbed-con.org/2015/files/slides/gradle_bedcon_2015.pdfDomain modelling is Gradle’s strength. We want it to be even better. Stronger modeling

at#bedcon

GradleinanutshellAsimplejavaproject

apply plugin:"java"

version = file("version.txt").text

repositories { jcenter()}

dependencies { testCompile "junit:junit:4.+"}

task printVersion << { println "We're using - version '$version'!" }

Page 8: Gradle 2.0 and beyond - Berlin Expert Daysbed-con.org/2015/files/slides/gradle_bedcon_2015.pdfDomain modelling is Gradle’s strength. We want it to be even better. Stronger modeling

at#bedcon

Gradle2.0Released1stJuly2014

Page 9: Gradle 2.0 and beyond - Berlin Expert Daysbed-con.org/2015/files/slides/gradle_bedcon_2015.pdfDomain modelling is Gradle’s strength. We want it to be even better. Stronger modeling

at#bedcon

Gradle2.7Released14thSeptember2015

Page 10: Gradle 2.0 and beyond - Berlin Expert Daysbed-con.org/2015/files/slides/gradle_bedcon_2015.pdfDomain modelling is Gradle’s strength. We want it to be even better. Stronger modeling

at#bedcon

Let’stakeacloserlookonPluginPortal

PlaySupport

GradleTestKit

EvenbetterDependencyManagement

NativeBuildSupportimprovements

EnhancedToolingAPI

Page 11: Gradle 2.0 and beyond - Berlin Expert Daysbed-con.org/2015/files/slides/gradle_bedcon_2015.pdfDomain modelling is Gradle’s strength. We want it to be even better. Stronger modeling

at#bedcon

PluginPortal

Page 12: Gradle 2.0 and beyond - Berlin Expert Daysbed-con.org/2015/files/slides/gradle_bedcon_2015.pdfDomain modelling is Gradle’s strength. We want it to be even better. Stronger modeling

at#bedcon

PluginPortalII

Page 13: Gradle 2.0 and beyond - Berlin Expert Daysbed-con.org/2015/files/slides/gradle_bedcon_2015.pdfDomain modelling is Gradle’s strength. We want it to be even better. Stronger modeling

at#bedcon

PlaySupportDEMO

Page 14: Gradle 2.0 and beyond - Berlin Expert Daysbed-con.org/2015/files/slides/gradle_bedcon_2015.pdfDomain modelling is Gradle’s strength. We want it to be even better. Stronger modeling

at#bedcon

ContinousMode> gralde build -t

Page 15: Gradle 2.0 and beyond - Berlin Expert Daysbed-con.org/2015/files/slides/gradle_bedcon_2015.pdfDomain modelling is Gradle’s strength. We want it to be even better. Stronger modeling

at#bedcon

GradleTestKitFunctionaltestingofyourbuildlogic

def setup() { buildFile = testProjectDir.newFile('build.gradle')}

def "hello world task prints hello world"() { given: buildFile << """ task helloWorld { doLast { println 'Hello world!' } } """

when: def result = GradleRunner.create() .withProjectDir(testProjectDir.root) .withArguments('helloWorld') .build()

then: result.standardOutput.contains('Hello world!') result.task(":helloWorld").outcome == SUCCESS}

Page 16: Gradle 2.0 and beyond - Berlin Expert Daysbed-con.org/2015/files/slides/gradle_bedcon_2015.pdfDomain modelling is Gradle’s strength. We want it to be even better. Stronger modeling

at#bedcon

DependencyManagement

Page 17: Gradle 2.0 and beyond - Berlin Expert Daysbed-con.org/2015/files/slides/gradle_bedcon_2015.pdfDomain modelling is Gradle’s strength. We want it to be even better. Stronger modeling

at#bedcon

DependencyResolveRulesForcingconsistentversionforagroupoflibraries

configurations.all { resolutionStrategy.eachDependency { DependencyResolveDetails details -> if (details.requested.group == 'org.gradle') { details.useVersion '2.7' } }}

Page 18: Gradle 2.0 and beyond - Berlin Expert Daysbed-con.org/2015/files/slides/gradle_bedcon_2015.pdfDomain modelling is Gradle’s strength. We want it to be even better. Stronger modeling

at#bedcon

DependencyResolveRulesUsingacustomversioningscheme

configurations.all { resolutionStrategy { eachDependency { DependencyResolveDetails d -> if (d.requested.version == 'default') { def version = findDefaultVersion(d.requested.group, d.requested.name) d.useVersion version } } }}

Object findDefaultVersion(String group, String name) { // some custom logic that resolves the default // version into a specific version "1.0"}

Page 19: Gradle 2.0 and beyond - Berlin Expert Daysbed-con.org/2015/files/slides/gradle_bedcon_2015.pdfDomain modelling is Gradle’s strength. We want it to be even better. Stronger modeling

at#bedcon

DependencyResolveRulesChangingdependencygroupand/ornameattheresolution

configurations.all { resolutionStrategy { eachDependency { DependencyResolveDetails details -> if (details.requested.name == 'groovy-all') { //prefer 'groovy' over 'groovy-all': details.useTarget(group: details.requested.group, name: 'groovy', version: details.requested.version) } if (details.requested.name == 'log4j') { //prefer 'log4j-over-slf4j' over 'log4j', details.useTarget "org.slf4j:log4j-over-slf4j:1.7.10" } } }}

Page 20: Gradle 2.0 and beyond - Berlin Expert Daysbed-con.org/2015/files/slides/gradle_bedcon_2015.pdfDomain modelling is Gradle’s strength. We want it to be even better. Stronger modeling

at#bedcon

ComponentSelectionRulesdependencies { compile 'org.slf4j:slf4j-api:+' testCompile 'junit:junit:4.11'}

configurations { all { resolutionStrategy { componentSelection { withModule("org.slf4j:slf4j-api") { selection -> if(selection.candidate.version == "1.7.10") { selection.reject("known buggy version") } } } } }}

Page 21: Gradle 2.0 and beyond - Berlin Expert Daysbed-con.org/2015/files/slides/gradle_bedcon_2015.pdfDomain modelling is Gradle’s strength. We want it to be even better. Stronger modeling

at#bedcon

ArtifactQueryApitask resolveMavenPomFiles << { def componentIds = configurations.compile.incoming.resolutionResult.allDependencies.collect { it.selected.id }

def result = dependencies.createArtifactResolutionQuery() .forComponents(componentIds) .withArtifacts(MavenModule, MavenPomArtifact) .execute()

for(component in result.resolvedComponents) { component.getArtifacts(MavenPomArtifact).each { def pom = new XmlSlurper().parse(it.file) println pom.url } }}

Page 22: Gradle 2.0 and beyond - Berlin Expert Daysbed-con.org/2015/files/slides/gradle_bedcon_2015.pdfDomain modelling is Gradle’s strength. We want it to be even better. Stronger modeling

at#bedcon

DependencySubstitutionAllowselasticdependencies

configurations.all { resolutionStrategy.dependencySubstitution { substitute project(":api") with module("org.utils:api:1.3") }}

Page 23: Gradle 2.0 and beyond - Berlin Expert Daysbed-con.org/2015/files/slides/gradle_bedcon_2015.pdfDomain modelling is Gradle’s strength. We want it to be even better. Stronger modeling

at#bedcon

BuildshipEclipseplugindevelopedfromscratchbyGradleInc.

Partoftheeclipsefoundation

Wejustleftincubatorstatuslastweek

Shippedaspartofthemars.1release(25.09.2015)

Page 24: Gradle 2.0 and beyond - Berlin Expert Daysbed-con.org/2015/files/slides/gradle_bedcon_2015.pdfDomain modelling is Gradle’s strength. We want it to be even better. Stronger modeling

at#bedcon

BuildshipDemo

Page 25: Gradle 2.0 and beyond - Berlin Expert Daysbed-con.org/2015/files/slides/gradle_bedcon_2015.pdfDomain modelling is Gradle’s strength. We want it to be even better. Stronger modeling

at#bedcon

CurrentfocusNewGradlemodel

Dependencymanagement

Betterdomainmodelling

Page 26: Gradle 2.0 and beyond - Berlin Expert Daysbed-con.org/2015/files/slides/gradle_bedcon_2015.pdfDomain modelling is Gradle’s strength. We want it to be even better. Stronger modeling

at#bedcon

Dependencymanagement

Page 27: Gradle 2.0 and beyond - Berlin Expert Daysbed-con.org/2015/files/slides/gradle_bedcon_2015.pdfDomain modelling is Gradle’s strength. We want it to be even better. Stronger modeling

at#bedcon

Dependencymanagementtodealwithdependencieswehave:

group,name,version

classifier,customivyconfigurations

Page 28: Gradle 2.0 and beyond - Berlin Expert Daysbed-con.org/2015/files/slides/gradle_bedcon_2015.pdfDomain modelling is Gradle’s strength. We want it to be even better. Stronger modeling

at#bedcon

Dependencymanagementtodealwithdependencieswehave:

group,name,version

classifier,customivyconfigurations

butweneedtodealwith:

java,groovy,scalaversions

android,nativetargetplatforms,allkindofjavascript

Page 29: Gradle 2.0 and beyond - Berlin Expert Daysbed-con.org/2015/files/slides/gradle_bedcon_2015.pdfDomain modelling is Gradle’s strength. We want it to be even better. Stronger modeling

at#bedcon

Dependencymanagement

Page 30: Gradle 2.0 and beyond - Berlin Expert Daysbed-con.org/2015/files/slides/gradle_bedcon_2015.pdfDomain modelling is Gradle’s strength. We want it to be even better. Stronger modeling

at#bedcon

DependencymanagementAllowvariantawaredependencymanagement

Page 31: Gradle 2.0 and beyond - Berlin Expert Daysbed-con.org/2015/files/slides/gradle_bedcon_2015.pdfDomain modelling is Gradle’s strength. We want it to be even better. Stronger modeling

at#bedcon

DependencymanagementAllowvariantawaredependencymanagement

Supportarbitrarydimensions+custommetadata

Page 32: Gradle 2.0 and beyond - Berlin Expert Daysbed-con.org/2015/files/slides/gradle_bedcon_2015.pdfDomain modelling is Gradle’s strength. We want it to be even better. Stronger modeling

at#bedcon

BetterdomainmodellingDomainmodellingisGradle’sstrength.

Wewantittobeevenbetter.

Page 33: Gradle 2.0 and beyond - Berlin Expert Daysbed-con.org/2015/files/slides/gradle_bedcon_2015.pdfDomain modelling is Gradle’s strength. We want it to be even better. Stronger modeling

at#bedcon

BetterdomainmodellingDomainmodellingisGradle’sstrength.

Wewantittobeevenbetter.

Strongermodeling↪TheJARisnotthetaskthatcreatesit.

Cleanermodeling↪Avoidmixingexecutionconcernsintothedatamodel.

Collaborativemodeling↪IknowhowtodosomethingtoJARs.

Comprehensiblemodels↪WhoiscontributingtothecontentsofthisJAR?

Page 34: Gradle 2.0 and beyond - Berlin Expert Daysbed-con.org/2015/files/slides/gradle_bedcon_2015.pdfDomain modelling is Gradle’s strength. We want it to be even better. Stronger modeling

at#bedcon

AnewGradlemodel

Page 35: Gradle 2.0 and beyond - Berlin Expert Daysbed-con.org/2015/files/slides/gradle_bedcon_2015.pdfDomain modelling is Gradle’s strength. We want it to be even better. Stronger modeling

at#bedcon

Thecurrentmodelconfiguration➞execution

Page 36: Gradle 2.0 and beyond - Berlin Expert Daysbed-con.org/2015/files/slides/gradle_bedcon_2015.pdfDomain modelling is Gradle’s strength. We want it to be even better. Stronger modeling

at#bedcon

Thecurrentmodelconfiguration➞execution

configuration:

input=buildlogic

output=buildmodel

Page 37: Gradle 2.0 and beyond - Berlin Expert Daysbed-con.org/2015/files/slides/gradle_bedcon_2015.pdfDomain modelling is Gradle’s strength. We want it to be even better. Stronger modeling

at#bedcon

Thecurrentmodelconfiguration➞execution

configuration:

input=buildlogic

output=buildmodel

execution:

input=buildmodel

output=buildartifacts

Page 38: Gradle 2.0 and beyond - Berlin Expert Daysbed-con.org/2015/files/slides/gradle_bedcon_2015.pdfDomain modelling is Gradle’s strength. We want it to be even better. Stronger modeling

at#bedcon

Limitationsofthecurrentmodel

implementationofdeclarativebuildapiishard

doneintheimperativeway

eagerness

lazyness

hooks

scaling

Page 39: Gradle 2.0 and beyond - Berlin Expert Daysbed-con.org/2015/files/slides/gradle_bedcon_2015.pdfDomain modelling is Gradle’s strength. We want it to be even better. Stronger modeling

at#bedcon

ToohardForbuildengineersandbuildusers.

Wecandobetter.

Page 40: Gradle 2.0 and beyond - Berlin Expert Daysbed-con.org/2015/files/slides/gradle_bedcon_2015.pdfDomain modelling is Gradle’s strength. We want it to be even better. Stronger modeling

at#bedcon

ThenewGradlemodelAnewapproachtotheconfigurationphase.

Really,thesamesolutionforthe"executionphase"appliedtoconfiguration.

Agraphofdependentfunctions

Aninterpretabledatamodel

Page 41: Gradle 2.0 and beyond - Berlin Expert Daysbed-con.org/2015/files/slides/gradle_bedcon_2015.pdfDomain modelling is Gradle’s strength. We want it to be even better. Stronger modeling

at#bedcon

ThenewGradlemodelIEnterRuleSource

class PersonRules extends RuleSource { @Model void person(Person p) {}

@Mutate void setFirstName(Person p) { p.firstName = "John" }

@Mutate void createHelloTask(ModelMap<Task> tasks, Person p) { tasks.create("hello") { doLast { println "Hello $p.firstName $p.lastName!" } } }}

Page 42: Gradle 2.0 and beyond - Berlin Expert Daysbed-con.org/2015/files/slides/gradle_bedcon_2015.pdfDomain modelling is Gradle’s strength. We want it to be even better. Stronger modeling

at#bedcon

ThenewGradlemodelIIthebuildscript

apply plugin: PersonRules

model { person { lastName = "Smith" }}

Page 43: Gradle 2.0 and beyond - Berlin Expert Daysbed-con.org/2015/files/slides/gradle_bedcon_2015.pdfDomain modelling is Gradle’s strength. We want it to be even better. Stronger modeling

at#bedcon

ThenewGradlemodelIIIAndroidexperimentalplugin

model { android { compileSdkVersion = 22 buildToolsVersion = "22.0.1"

defaultConfig.with { applicationId = "com.example.user.myapplication" minSdkVersion.apiLevel = 15 targetSdkVersion.apiLevel = 22 versionCode = 1 versionName = "1.0" } }}

Page 44: Gradle 2.0 and beyond - Berlin Expert Daysbed-con.org/2015/files/slides/gradle_bedcon_2015.pdfDomain modelling is Gradle’s strength. We want it to be even better. Stronger modeling

at#bedcon

ThenewGradlemodelIVasanenablerfor

buildmuchfasterandmorememoryefficient

justconfigurewhatisrequired

allowfundamentalparallization

providebetterdiagnostics

reusecachedconfiguration

Page 45: Gradle 2.0 and beyond - Berlin Expert Daysbed-con.org/2015/files/slides/gradle_bedcon_2015.pdfDomain modelling is Gradle’s strength. We want it to be even better. Stronger modeling

at#bedcon

Gradle3.0

Page 46: Gradle 2.0 and beyond - Berlin Expert Daysbed-con.org/2015/files/slides/gradle_bedcon_2015.pdfDomain modelling is Gradle’s strength. We want it to be even better. Stronger modeling

at#bedcon

otherfutureplansjigsawsupport

shareddistributedcache

nextlevelnativebuildsupport

moredaemonutilisation

continuedtoolingimprovements

Page 47: Gradle 2.0 and beyond - Berlin Expert Daysbed-con.org/2015/files/slides/gradle_bedcon_2015.pdfDomain modelling is Gradle’s strength. We want it to be even better. Stronger modeling

at#bedcon

Linksandpointershttps://docs.gradle.org/current/userguide/new_model.html

http://gradle.org/roadmap

http://discuss.gradle.org/c/roadmap

Page 48: Gradle 2.0 and beyond - Berlin Expert Daysbed-con.org/2015/files/slides/gradle_bedcon_2015.pdfDomain modelling is Gradle’s strength. We want it to be even better. Stronger modeling

at#bedcon

Q&A

Page 49: Gradle 2.0 and beyond - Berlin Expert Daysbed-con.org/2015/files/slides/gradle_bedcon_2015.pdfDomain modelling is Gradle’s strength. We want it to be even better. Stronger modeling

at#bedcon

thanks!

Page 50: Gradle 2.0 and beyond - Berlin Expert Daysbed-con.org/2015/files/slides/gradle_bedcon_2015.pdfDomain modelling is Gradle’s strength. We want it to be even better. Stronger modeling

at#bedcon

TODOpdfexport→decktape.js

header/footer

makeasciidoctorofflineavailable