Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Gradle – Build Happiness (German)
Search
Marc Philipp
January 28, 2019
Programming
280
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Gradle – Build Happiness (German)
Introduction to the Gradle Build Tool, Build Scans and the Build Cache
Marc Philipp
January 28, 2019
More Decks by Marc Philipp
See All by Marc Philipp
JUnit 6
marcphilipp
1
89
JUnit 6.0
marcphilipp
2
67
Catching up with JUnit
marcphilipp
0
320
Catching up with JUnit 5
marcphilipp
1
220
The JUnit Crew Presents What's New
marcphilipp
2
130
Behind the scenes of JUnit 5 – running an independent open source project by example
marcphilipp
0
150
Running an independent open source project by example
marcphilipp
1
130
Automatisierte Tests mit Machine Learning und verteilter Ausführung beschleunigen
marcphilipp
1
280
Meet the JUnit Team in Person!
marcphilipp
1
230
Other Decks in Programming
See All in Programming
設計次第でAIコードの読む量は減らせる / designing-for-code-reading
minodriven
34
15k
半永久的に提供し続けられるプライベートクラウドを目指して ― 利用者の認知負荷を抑えるAPI抽象化とハードウェア世代交代の基盤設計
tomokon
0
460
R8 の設定見直しでアプリサイズ削減
andpad
0
190
Turning Architecture into Unit Tests in the AI Era (NSSpain XIV)
steliosf
PRO
1
130
AIに “答え“を書かせるのを やめてみた
___akari11
0
110
Everything will be SERVERLESS — 信じて運用した10年の経験値 / Everything Will be Serverless — Lessons Learned from 10 Years of Operational Experience
seike460
PRO
1
780
プロダクトコードからライブラリの境界を見つける
elmetal
PRO
0
110
Kubernetes祭り #2 OP/ED
bells17
0
100
UnityでSystem.Net.WebSocketsなWebSocketサーバが動かないのでUnity Monoのコードを覗いてみた / about implementing websocket server with unity mono
drumath2237
1
560
FreeBSDでZabbixを動かす
kenkino
0
360
技術的負債を組織課題として解く-増えすぎたマイクロサービスとの戦い-
reimaru
1
2.9k
すこし踏み込む CancellationToken
htkym
2
1.6k
Featured
See All Featured
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
920
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.4k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.4k
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
1k
How to make the Groovebox
asonas
2
2.5k
Reality Check: Gamification 10 Years Later
codingconduct
0
2.3k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
3k
Done Done
chrislema
187
17k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
46k
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
270
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
Transcript
GRADLE – BUILD HAPPINESS MARC PHILIPP, GRADLE INC.
MARC PHILIPP So ware Engineer bei Gradle, Inc. JUnit Maintainer
seit 2012 Twi er: Web: @marcphilipp marcphilipp.de
✋ SHOW OF HANDS
WAS IST GRADLE?
WAS IST GRADLE? Basiert auf der Java Virtual Machine (JVM)
Implemen ert in Java 100% Open Source (Apache 2.0) und kostenlos Gradle ist ein Build‑ und Automa sierungswerkzeug.
VIELSEITIG EINSETZBAR Java‑Ökosystem: Java, Groovy, Kotlin, Scala, … Na ve
Projekte: C, C++, Swi , … Android Sons ges: Go, Asciidoctor, …
GRADLE IN ZAHLEN Mehr als 7M Downloads/Monat OSS‑Projekt #17 weltweit
35+ Gradle Engineers 300K Builds/Woche @ LinkedIn
GRADLE INC. Vision: Build Happiness Mission: Accelerate Developer Produc vity
Produkte: Build Scans and Enterprise Build Cache [Consul ng, Support, Development Services etc.] [Training: online, öffentlich und in‑house]
AGENDA Kurze Einführung in Gradle Gradle Plugins Inkrementelle Builds Build
Scans Build Cache
KURZE EINFÜHRUNG IN GRADLE
HELLO WORLD tasks.register("helloWorld") { // in build.gradle doLast { println("Hello
World!") } } $ gradle helloWorld > Task :helloWorld Hello World! BUILD SUCCESSFUL in 0s 1 actionable task: 1 executed
TASKS Ein Gradle‑Build führt einen/mehrere Tasks aus. Tasks können von
anderen Tasks abhängen. Tasks haben Inputs und Outputs.
BUILDSCRIPTS Ein Gradle‑Projekt wird mi els Buildscripts konfiguriert: settings.gradle[.kts] :
Konfiguriert, welche Subprojekte Teile des Builds sind. build.gradle[.kts] : Konfiguriert Plugins und Tasks, die im Build verwendet werden.
GRADLE WRAPPER ./gradlew <tasks> sta gradle <tasks> Ermöglicht Ausführung des
Builds ohne vorherige Installa on von Gradle: Lädt ggfs. die benö gte Version herunter. Entwickler und Build‑Server verwenden immer diesselbe Version.
DATEISTRUKTUR $ gradle init --dsl=kotlin --type=java-application \ --test-framework=junit --package=com.example \
--project-name=new-project BUILD SUCCESSFUL in 0s 2 actionable tasks: 2 executed ├── build.gradle.kts // Buildscript ├── gradle/wrapper // Wrapper JAR und Konfiguration ├── gradlew // Wrapper script für Linux/macOS ├── gradlew.bat // Wrapper script für Windows ├── settings.gradle.kts // Settings └── src // Java source tree ├── main │ ├── java │ └── resources └── test ├── java └── resources
SETTINGS.GRADLE.KTS rootProject.name = "new-project"
BUILD.GRADLE.KTS plugins { java // zum Kompilieren von Java-Quellcode application
// zum Generieren von Startup-Scripts } repositories { jcenter() // zum Auffinden von Dependencies } dependencies { implementation("com.google.guava:guava:26.0-jre") testImplementation("junit:junit:4.12") } application { // Extension des 'application'-Plugins mainClassName = "com.example.App" }
GROOVY VS. KOTLIN DSL Buildscript verwenden eine Domain‑Specific‑ Language (DSL).
Ursprünglich wurde dazu Groovy verwendet. Groovy: Dynamisch typisiert, IDE‑Support schwierig Seit Gradle 5.0 gibt es eine stabile DSL in Kotlin.
GRADLE PLUGINS
PLUGINS Definieren Tasks, z.B. compileJava Stellen Möglichkeiten zur Konfigura on
bereit, z.B. die application ‑Extension Wenden andere Plugins an plugins { java // zum Kompilieren von Java-Quellcode application // zum Generieren von Startup-Scripts }
EIGENE PLUGINS Ziel: Vereinheitlichung der Build‑Logik über Projekt‑ Grenzen hinweg
plugins { id("com.example.myplugin") version "1.0" } public class MyPlugin implements Plugin<Project> { @Override public void apply(Project project) { project.getPluginManager().apply(JavaPlugin.class); project.getTasks().register("myTask", task -> ...); // ... } }
PLUGIN PORTAL Über 3000 Community‑Plugins
INKREMENTELLE BUILDS
INKREMENTELLE BUILDS Führe nur Tasks aus, die von Änderungen zwischen
zwei Builds betroffen sind. Behalte die Ergebnisdateien aller Tasks die up‑to‑ date sind.
ERSTER BUILD $ ./gradlew --console=plain build > Task :compileJava >
Task :processResources NO-SOURCE > Task :classes > Task :jar [...] > Task :compileTestJava > Task :testClasses > Task :test > Task :check > Task :build BUILD SUCCESSFUL in 5s 7 actionable tasks: 7 executed
INKREMENTELLER BUILD $ ./gradlew --console=plain build > Task :compileJava UP-TO-DATE
> Task :processResources NO-SOURCE > Task :classes UP-TO-DATE > Task :jar UP-TO-DATE [...] > Task :compileTestJava UP-TO-DATE > Task :testClasses UP-TO-DATE > Task :test UP-TO-DATE > Task :check UP-TO-DATE > Task :build UP-TO-DATE BUILD SUCCESSFUL in 0s 7 actionable tasks: 7 up-to-date
WENN WIR ZEIT HÄTTEN… Compile avoidance & incremental compiler Gradle
Daemon Con nuous Builds Composite Builds Tooling API / IDE integra on Worker API
BUILD SCANS
BUILD SCAN: AKTIVIERUNG › $ ./gradlew build --scan BUILD SUCCESSFUL
in 1s 7 actionable tasks: 5 executed, 2 up-to-date Publishing build scan... https://gradle.com/s/lu7dxy7quyoju h ps:/ /gradle.com/s/lu7dxy7quyoju
BUILD SCAN: TIMELINE
BUILD SCAN: DEPENDENCIES
BUILD SCANS (KOSTENLOS) Beschleunigen die Lösung von Build‑Problemen Einfach mit
Kollegen teilbarer Link Kostenlose Nutzung auf scans.gradle.com
ENTERPRISE BUILD SCANS Gradle Enterprise bietet zusätzliche Features: Hos ng
auf eigenem Server Vergleich zweier Build Scans Entwicklung von Build‑Metriken über die Zeit
BUILDS ÜBER DIE ZEIT
VERGLEICH ZWEIER BUILDS
BUILD CACHE
MORGENS HALB 10 IN DEUTSCHLAND… Give every developer back one
hour a day! $ git pull [...] 185 files changed, 4320 insertions(+), 1755 deletions(-) $ ./gradlew --build-cache sanityCheck BUILD SUCCESSFUL in 1m 11s 1338 actionable tasks: 238 executed, 1100 from cache
BUILD CACHE Verwende Ergebnisse aller vorherigen Builds
INPUTS → TASK → OUTPUTS Berechne cacheKey eines Tasks aus
dessen Inputs: cacheKey(javaCompile) = hash(sourceFiles, …) Verwende Ergebnisdateien als cacheEntry: cacheEntry(javaCompile) = fileTree(classFiles)
REMOTE BUILD CACHE
LOKAL UND REMOTE CI‑Server speichern Task‑Ergebnisse im Remote Build Cache
Lokale Builds verwenden Ergebnisse aus dem Remote Build Cache Ergebnisse werden für zukün ige Builds im lokalen Build Cache gespeichert
GRADLE ENTERPRISE
NEU: JETZT AUCH FÜR APACHE MAVEN™ › 0:00 / 0:34
h ps:/ /gradle.com/blog/maven/
GRADLE ENTERPRISE KUNDEN › gradle.com
Q & A