Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
"Gradle meets Kotlin"ってどんな感じ?
Search
ukaznil
November 22, 2017
Programming
3
440
"Gradle meets Kotlin"ってどんな感じ?
どこでもKotlin #4の資料です。
https://m3-engineer.connpass.com/event/70561/
ukaznil
November 22, 2017
Tweet
Share
More Decks by ukaznil
See All by ukaznil
「Flutterってなんなん」と思って1週間経った
ukaznil
1
670
"Convert Java File to Kotlin File"の甘い罠
ukaznil
0
1.3k
Swiftは""" """のか?
ukaznil
0
950
Other Decks in Programming
See All in Programming
iOS開発スターターキットの作り方
akidon0000
0
230
実践 Dev Containers × Claude Code
touyu
1
120
DMMを支える決済基盤の技術的負債にどう立ち向かうか / Addressing Technical Debt in Payment Infrastructure
yoshiyoshifujii
5
760
知って得する@cloudflare_vite-pluginのあれこれ
chimame
1
140
DataformでPythonする / dataform-de-python
snhryt
0
150
管你要 trace 什麼、bpftrace 用下去就對了 — COSCUP 2025
shunghsiyu
0
150
AI Ramen Fight
yusukebe
0
120
0から始めるモジュラーモノリス-クリーンなモノリスを目指して
sushi0120
0
250
実践!App Intents対応
yuukiw00w
0
120
SwiftでMCPサーバーを作ろう!
giginet
PRO
2
220
プロダクトという一杯を作る - プロダクトチームが味の責任を持つまでの煮込み奮闘記
hiliteeternal
0
370
11年かかって やっとVibe Codingに 時代が追いつきましたね
yimajo
1
240
Featured
See All Featured
Git: the NoSQL Database
bkeepers
PRO
431
65k
Why Our Code Smells
bkeepers
PRO
337
57k
Imperfection Machines: The Place of Print at Facebook
scottboms
267
13k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
Being A Developer After 40
akosma
90
590k
A better future with KSS
kneath
238
17k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
8
750
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3k
Designing for humans not robots
tammielis
253
25k
Raft: Consensus for Rubyists
vanstee
140
7k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Writing Fast Ruby
sferik
628
62k
Transcript
"Gradle meets Kotlin" ͬͯͲΜͳײ͡ʁ 2017/11/22 Wed. Ͳ͜ͰKotlin #4 @ukaznil :
Tatsuya KONISHI http://ukaznil.com/
Gradle is ... • JVMܥͷϏϧυπʔϧ • AntɼMavenɼsbtͱ͔ͱಉ͡ • GroovyϕʔεͷDSLͰهड़ •
GradleͰͰ͖Δ͜ͱ • ϏϧυͰ͖·͢ (SBEMFͰ,PUMJOαϙʔτ ʢ!ʣ@ • Ϗϧυʹؔ͢ΔϩδοΫΛΊΔ • ಠࣗtaskͷ࣮ɼґଘؔʢલޙؔʣͷ੍ޚ • ࣾϦϙδτϦͷೝূ
None
͔͠GroovyͰ͋Δɻ ʮϏϧυ͍͚ͨͩ͠ͳͷʹʯ
ຊൃදͷૂ͍ • ʮGradleΑ͘Θ͔ΒΜʯΛ১͍ͨ͠ • GroovyΛॻ͚ͳ͍ͳΒɼ KotlinΛॻ͚͍͍͡Όͳ͍
it's me !! • Android app dev • झຯͰ6 Kotlinྺ2
• ຊAndroidͷձ ֶੜ෦OB • misc • name: Tatsuya KONISHI • major: machine learning • web site: http://ukaznil.com/ , Twitter: @ukaznil • job: '17 ৽ଔ >> γεςϜ։ൃ / AI • langs: Java(5yrs), Kotlin(2yrs), Scala(1yr) Papyrus
ʲεϥΠυͷݟํʳ ʊGroovy / Kotlinʊ ʹؔ͢Δهड़ίʔυ (SPPWZ ,PUMJO println('hello Groovy.') println("hello
Kotlin.")
build.gradleͷجຊతͳॻ͖ํ buildscript { repositories { maven { url 'https://plugins.gradle.org/m2/' }
} dependencies { classpath 'com.github.jengelman.gradle.plguins.shadow:2.0.1' } } apply plugin: 'java' apply plugin: 'com.github.johnrengelman.shadow' repositories { jcenter() maven { url 'https://your.domain.com/repo/' } } dependencies { compile 'your.group:your.compile-module:x.y.z' runtime 'your.group:your.runtime-module:x.y.z' } shadowJar { manifest { attributes 'Main-Class': 'com.your.domain.Main' } } (SPPWZ
build.gradleͷجຊతͳॻ͖ํ buildscript { repositories { maven { url 'https://plugins.gradle.org/m2/' }
} dependencies { classpath 'com.github.jengelman.gradle.plguins.shadow:2.0.1' } } apply plugin: 'java' apply plugin: 'com.github.johnrengelman.shadow' repositories { jcenter() maven { url 'https://your.domain.com/repo/' } } dependencies { compile 'your.group:your.compile-module:x.y.z' runtime 'your.group:your.runtime-module:x.y.z' } shadowJar { manifest { attributes 'Main-Class': 'com.your.domain.Main' } } (SPPWZ
build.gradleͷجຊతͳॻ͖ํ buildscript { repositories { maven { url 'https://plugins.gradle.org/m2/' }
} dependencies { classpath 'com.github.jengelman.gradle.plguins.shadow:2.0.1' } } apply plugin: 'java' apply plugin: 'com.github.johnrengelman.shadow' repositories { jcenter() maven { url 'https://your.domain.com/repo/' } } dependencies { compile 'your.group:your.compile-module:x.y.z' runtime 'your.group:your.runtime-module:x.y.z' } shadowJar { manifest { attributes 'Main-Class': 'com.your.domain.Main' } } (SPPWZ
ʢ͓·͚ʣϓϥάΠϯͰڞ༗ buildscript { repositories { maven { url 'https:// plugins.gradle.org/m2/'
} } dependencies { classpath 'your.plugin:1.0' } } apply plugin: 'java' apply plugin: 'your.plugin' repositories { jcenter() } dependencies { compile 'your.group:your.compile- module:x.y.z' runtime 'your.group:your.runtime- module:x.y.z' } class MyP implements Plugin<Project> { @Override void apply(Project project) { // Private repository project.allprojects { p -> p.repositories { maven { url 'https://hoge.com/' credentials { username = 'taro' password = 'kotlin' } } } } // Original task project.task('unhappy-task') { description 'aiueo' dependsOn project.jar } << { throw new GradleException('> <') } } } (SPPWZ
ʢ͓·͚ʣϓϥάΠϯͰڞ༗ buildscript { repositories { maven { url 'https:// plugins.gradle.org/m2/'
} } dependencies { classpath 'your.plugin:1.0' } } apply plugin: 'java' apply plugin: 'your.plugin' repositories { jcenter() } dependencies { compile 'your.group:your.compile- module:x.y.z' runtime 'your.group:your.runtime- module:x.y.z' } class MyP implements Plugin<Project> { @Override void apply(Project project) { // Private repository project.allprojects { p -> p.repositories { maven { url 'https://hoge.com/' credentials { username = 'taro' password = 'kotlin' } } } } // Original task project.task('unhappy-task') { description 'aiueo' dependsOn project.jar } << { throw new GradleException('> <') } } } (SPPWZ
GradleͰKotlin • ϓϥάΠϯͷద༻ • λεΫͷએݴ • .propertiesϑΝΠϧͷม • ɹ •
ɹ
ϓϥάΠϯͷద༻ plugins { id 'java' id 'org.jetbrains.kotlin.jvm' version '1.1.60' }
plugins { id("java") //id("org.jetbrains.kotlin.jvm") version "1.1.60" kotlin("jvm") version "1.1.60" } • 'java', 'kotlin'ϓϥάΠϯͰఆٛ͞Ε͍ͯΔλ εΫ͕͑ΔΑ͏ʹͳΔ dependencies { compile "org.jetbrains.kotlin:kotlin-stdlib:$version_kotlin" } (SPPWZ ,PUMJO
ϓϥάΠϯͷద༻ plugins { id 'java' id 'org.jetbrains.kotlin.jvm' version '1.1.60' }
plugins { id("java") //id("org.jetbrains.kotlin.jvm") version "1.1.60" kotlin("jvm") version "1.1.60" } • 'java', 'kotlin'ϓϥάΠϯͰఆٛ͞Ε͍ͯΔλ εΫ͕͑ΔΑ͏ʹͳΔ dependencies { compile "org.jetbrains.kotlin:kotlin-stdlib:$version_kotlin" } (SPPWZ ,PUMJO
λεΫͷఆٛ task myGroovyTask { description = 'my task' desctiption 'my
task' } doLast { //'<< {}' is deprecated println("with groovy") } task("myKotlinTask") { description = "my task" }.doLast { println("with kotlin") } (SPPWZ ,PUMJO
λεΫͷఆٛ task myGroovyTask { description = 'my task' desctiption 'my
task' } doLast { //'<< {}' is deprecated println("with groovy") } task("myKotlinTask") { description = "my task" }.doLast { println("with kotlin") } • Groovy / KotlinͷϓϩύςΟΞΫηεͷҧ͍ description = 'desc' || setDescription('desc') description 'desc' || description('desc') description = "desc" || setDescription("desc") (SPPWZ ,PUMJO
.propertiesϑΝΠϧͷม dependencies { compile "org.jetbrains.kotlin:kotlin- stdlib:$vKotlin" } val vKotlin by
project val vKotlin: String by extra val verkotlin = extra["vKotlin"] dependencies { compile "org.jetbrains.kotlin:kotlin- stdlib:$vKotlin" } vKotlin=1.1.60 (SPPWZ ,PUMJO HSBEMFQSPQFSUJFT
.propertiesϑΝΠϧͷม dependencies { compile "org.jetbrains.kotlin:kotlin- stdlib:$vKotlin" } val vKotlin by
project val vKotlin: String by extra val verkotlin = extra["vKotlin"] dependencies { compile "org.jetbrains.kotlin:kotlin- stdlib:$vKotlin" } vKotlin=1.1.60 (SPPWZ ,PUMJO HSBEMFQSPQFSUJFT ,PUMJO͢͜͠໘ɻɻɻ
GradleͰKotlin • ϓϥάΠϯͷద༻ • λεΫͷએݴ • .propertiesϑΝΠϧͷม • ɹ •
ɹ
GradleͰKotlin • ϓϥάΠϯͷద༻ • λεΫͷએݴ • .propertiesϑΝΠϧͷม • ɹ •
ɹ
GradleͰKotlin • ϓϥάΠϯͷద༻ • λεΫͷએݴ • .propertiesϑΝΠϧͷม • IDE͕ෆ •
ɹ
IDE͕@Groovy (SPPWZ ͳΜͯஸೡͳΤϥʔϝοηʔδʜʜοʂ
IDE͕ෆ@Kotlin ,PUMJO 0I
IDE͕ෆ@Kotlin(͓͔ΘΓ) ,PUMJO 0IʢBHBJOʣ
GradleͰKotlin • ϓϥάΠϯͷద༻ • λεΫͷએݴ • .propertiesϑΝΠϧͷม • IDE͕ෆ •
ɹ
GradleͰKotlin • ϓϥάΠϯͷద༻ • λεΫͷએݴ • .propertiesϑΝΠϧͷม • IDE͕ෆ •
IDE͕
IDE͕ෆ@Groovy (SPPWZ NBQͷLFZΛ֮͑ͳ͍ͱ͍͚ͳ͍ͷπϥ͍ɻɻɻ
IDE͕@Kotlin ,PUMJO FYDMVEF͓͚֮͑͑ͯ͞Կͱ͔ͳΔʂ UIBOLTUP֦ுؔ
ຊൃදͷ·ͱΊ • ʮGradleΑ͘Θ͔ΒΜʯΛ১͍ͨ͠ 㱺 buildπʔϧͷཧղʮٸ͕ճΕʯ • GroovyΛॻ͚ͳ͍ͳΒɼ KotlinΛॻ͚͍͍͡Όͳ͍ 㱺 λεΫͰΰϦΰϦ͢ΔͳΒԸܙେʁ
"Gradle meets Kotlin" ͬͯͲΜͳײ͡ʁ That's all of 2017/11/22 Wed. Ͳ͜ͰKotlin
#4 @ukaznil : Tatsuya KONISHI http://ukaznil.com/
Thank you, Kotliners !!