Gradle
Intro
Π‘ΠΈΡΡΠ΅ΠΌΠ° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΠΈ ΡΠ±ΠΎΡΠΊΠΈ. Π‘ΠΊΡΠΈΠΏΡΡ β ΡΡΠΎ dsl Π½Π° Groovy ΠΈΠ»ΠΈ Kotlin. ΠΠ΅ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ Android ΠΈ jvm, Π½ΠΎ ΠΈ Π΄Π»Ρ native (C++, swift) ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ³ΠΎ Π΄ΡΡΠ³ΠΎΠ³ΠΎ.
Youtube Π·Π°ΠΏΠΈΡΡ ΠΎΡ Redmadrobot: https://www.youtube.com/watch?v=WOBok2u-SL8
ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΎΡ Kotlin ΠΏΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Gradle Π΄Π»Ρ ΡΠ±ΠΎΡΠΊΠΈ kotlin-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ: https://kotlinlang.org/docs/gradle.html
ΠΠΎΠΉ ΠΏΡΠΎΠ΅ΠΊΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Ρ ΡΠΎΠ±ΠΈΡΠ°Π» kotlin multiplatform Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ Π΄Π»Ρ Π²Π΅Π±-ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΈ Π°Π½Π΄ΡΠΎΠΈΠ΄ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΏΠ°ΡΡΠ΅ΡΠ½Π° buildSrc ΠΈ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ° Kotlin DSL Π΄Π»Ρ gradle: https://github.com/IkeMurami-Examples/KotlinMultiplatformExample
ΠΡΠΈΠΌΠ΅ΡΡ multiplatform ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ²: https://kotlinlang.org/docs/multiplatform-mobile-samples.html
Install
releases: https://gradle.org/releases/
Π‘ΠΊΠ°ΡΠΈΠ²Π°Π΅ΠΌ Π±ΠΈΠ½Π°ΡΠΈ, ΠΊΠ»Π°Π΄Π΅ΠΌ Π² ΠΏΠ°ΠΏΠΊΡ, ΠΈ ΠΏΡΠΎΠΏΠΈΡΡΠ²Π°Π΅ΠΌ ΠΏΡΡΡ Π΄ΠΎ ΠΏΠ°ΠΏΠΊΠΈ bin Π² PATH.
Update gradle
ΠΠ»Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ gradle, Π½Π°Π΄ΠΎ Π·Π°Π΄Π°ΡΡ Π²Π΅ΡΡΠΈΡ Π΄Π»Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ com.android.tools.build:gradle
.
build.gradle
:
ΠΠΎΡ Π·Π΄Π΅ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΠΊΠ°ΠΊΠΈΠ΅ Π²Π΅ΡΡΠΈΠΈ Π΄ΠΎΡΡΡΠΏΠ½Ρ Π² google maven ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ (google()
): https://mvnrepository.com/artifact/com.android.tools.build/gradle-api?repo=google
ΠΡΡΡ Π΄Π²Π° ΡΠΏΠΎΡΠΎΠ±Π° ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ Π²Π΅ΡΡΠΈΡ gradle:
Android Studio: File > Project Structure > ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π²Π΅ΡΡΠΈΡ Gradle ΠΈΠ· Π²ΡΠΏΠ°Π΄Π°ΡΡΠ΅Π³ΠΎ ΡΠΏΠΈΡΠΊΠ°. ΠΡΠΆΠ½Π°Ρ Π²Π΅ΡΡΠΈΡ Gradle ΡΡΠ°Π·Ρ ΠΏΠΎΠ΄ΡΡΠ½Π΅ΡΡΡ
Terminal:
Basics
Π‘ΠΎΡΡΠΎΠΈΡ ΠΈΠ· ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² (ΠΎΠ½ΠΈ ΠΆΠ΅ Π½Π°Π·ΡΠ²Π°ΡΡΡΡ ΠΌΠΎΠ΄ΡΠ»ΡΠΌΠΈ, ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ·Π²Π°ΡΡ ΠΏΡΡΠ°Π½ΠΈΡΡ)
ΠΡΠΎΠ΅ΠΊΡΡ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠΊΠΎΠ»Ρ ΡΠ³ΠΎΠ΄Π½ΠΎ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠΌΠΈ
ΠΡΠΈΠΌΠ΅Ρ ΡΡΡΡΠΊΡΡΡΡ
settings.gradle β Π·Π΄Π΅ΡΡ ΠΎΠΏΠΈΡΠ°Π½Ρ Π²ΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΡ:
Tasks ΠΈ Projects
ΠΡΠΎ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π² Π΄ΠΎΠΌΠ΅Π½Π½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ Gradle
Π’Π°ΡΠΊ β ΠΎΡΠ½ΠΎΠ²Π½Π°Ρ Π΅Π΄ΠΈΠ½ΠΈΡΠ° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π² Gradle.
Π’Π°ΡΠΊΠΈ ΠΌΠΎΠ³ΡΡ Π·Π°Π²ΠΈΡΠ΅ΡΡ Π΄ΡΡΠ³ ΠΎΡ Π΄ΡΡΠ³Π°
ΠΡΠΈΠΌΠ΅Ρ ΡΠ°ΡΠΊΠ° (Π½Π° Kotlin DSL):
Task configuration
doFirst() ΠΈ doLast() β Π΄Π΅ΠΉΡΡΠ²ΠΈΡ, ΡΠΎΠ²Π΅ΡΡΠ°Π΅ΠΌΡΠ΅ Π² Π½Π°ΡΠ°Π»Π΅ ΠΈ Π² ΠΊΠΎΠ½ΡΠ΅ Π²ΡΠΏΠΎΠ»Π΅Π½Π΅Π½ΠΈΡ ΡΠ°ΡΠΊΠ°
description β ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΠ°ΡΠΊΠ°
group β ΠΈΠΌΡ Π³ΡΡΠΏΠΏΡ ΡΠ°ΡΠΊΠΎΠ²
extra properties
Task actions
ΠΠ΅ΡΠΎΠ΄Ρ, ΠΏΠΎΠΌΠ΅ΡΠ΅Π½Π½ΡΠ΅ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠ΅ΠΉ @TaskAction, Π±ΡΠ΄ΡΡ Π·Π°ΠΏΡΡΠΊΠ°ΡΡΡΡ ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ ΡΠ°ΡΠΊΠ°
Π£ ΡΠ°ΡΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ action'ΠΎΠ²
ΠΡΠ΅ action'Ρ Ρ ΡΠ°Π½ΡΡΡΡ Π² ΡΠΏΠΈΡΠΊΠ΅ ΠΈ Π±ΡΠ΄ΡΡ Π·Π°ΠΏΡΡΠΊΠ°ΡΡΡΡ ΠΏΠΎ ΠΏΠΎΡΡΠ΄ΠΊΡ
ΠΠ΅ΡΠΎΠ΄Ρ doFirst ΠΈ doLast Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ action'Ρ Π² Π½Π°ΡΠ°Π»ΠΎ ΠΈΠ»ΠΈ ΠΊΠΎΠ½Π΅Ρ ΡΠΏΠΈΡΠΊΠ°
Incremental Tasks
ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°ΡΠΊΠΈ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΡΠΆΠ΅Π»ΡΠ΅, ΠΈ Π½Π΅Ρ ΡΠΌΡΡΠ»Π° ΠΈΡ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠΊΠ°ΡΡ, Π΅ΡΠ»ΠΈ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»Π° ΠΎΡΠΈΠ±ΠΊΠ° ΠΈΠ»ΠΈ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅-ΡΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΡΠ°ΠΉΠ»Π°Ρ Π² ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΡΠ°ΡΠΊΠ°Ρ . ΠΡΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠ΅ API, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π½Π΅ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΡΠ°ΡΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π·Π°Π²Π΅ΡΡΠΈΠ»ΠΈΡΡ ΡΡΠΏΠ΅ΡΠ½ΠΎ.
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠ°ΡΠΊΠΎΠ²
NO-SOURCE β ΡΠ°ΡΠΊ Π½Π΅ Π±ΡΠ» Π·Π°ΠΏΡΡΠ΅Π½, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π½Π΅ Π½Π°ΡΠ»ΠΎΡΡ Π΄Π°Π½Π½ΡΡ Π΄Π»Ρ Π½Π΅Π³ΠΎ
SKIPPED β ΡΠ°ΡΠΊ Π½Π΅ Π±ΡΠ» Π·Π°ΠΏΡΡΠ΅Π½
Π±ΡΠ» ΡΠ²Π½ΠΎ Π²ΡΠΊΠ»ΡΡΠ΅Π½
ΡΠ΅ΡΠ΅Π· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡΡ ΡΡΡΠΎΠΊΡ (ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ -x)
ΡΠ΅ΡΠ΅Π· ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ enabled=false
ΡΠ΅ΡΠ΅Π· ΡΠΏΠΈΡΠΎΠΊ excludedTaskNames
ΠΏΡΠΎΠΈΠ·ΠΎΡΠ΅Π» StopExecutionException
Ρ ΡΠ°ΡΠΊΠ° Π΅ΡΡΡ ΠΏΡΠ΅Π΄ΠΈΠΊΠ°Ρ onlyIf {}, ΠΊΠΎΡΠΎΡΡΠΉ Π²Π΅ΡΠ½ΡΠ» false
FROM-CACHE
ΠΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ task'Π° Π±ΡΠ» Π²Π·ΡΡ ΠΈΠ· ΠΊΡΡΠ°
Π§ΡΠΎΠ±Ρ gradle ΠΌΠΎΠ³ ΠΊΡΡΠΈΡΠΎΠ²Π°ΡΡ task, Π½Π°Π΄ΠΎ Π΅Π³ΠΎ ΡΠ²Π½ΠΎ ΠΏΠΎΠΌΠ΅ΡΠΈΡΡ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠ΅ΠΉ @CacheableTask
Gradle Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΈΠΌΠ΅Π½ΠΈ ΠΊΠ»Π°ΡΡΠ°, Π²Ρ ΠΎΠ΄Π½ΡΡ ΠΈ Π²ΡΡ ΠΎΠ΄Π½ΡΡ Π΄Π°Π½Π½ΡΡ ΠΈ Π΄ΡΡΠ³ΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΡΠ°ΠΌ Π²ΡΡΠΈΡΠ»ΡΠ΅Ρ ΠΊΠ»ΡΡ
ΠΡΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΌ, Π½ΠΎ ΠΈ ΡΠ΄Π°Π»Π΅Π½Π½ΡΠΌ, ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΠΌΠ°ΡΠΈΠ½Π°ΠΌΠΈ
UP-TO-DATE
ΡΡΠ°ΡΡΠΉ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ Π² gradle, ΠΏΡΠΈΠ΄ΡΠΌΠ°Π½Π½ΡΠΉ Π΄ΠΎ ΠΊΡΡΠ°
Task ΠΈΠΌΠ΅Π΅Ρ Π²Ρ ΠΎΠ΄Π½ΡΠ΅ ΠΈ Π²ΡΡ ΠΎΠ΄Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΈΡΡ
Task ΡΠ²Π½ΠΎ ΡΠΊΠ°Π·Π°Π» gradle, ΡΡΠΎ Π΅Π³ΠΎ Π²ΡΡ ΠΎΠ΄Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΈΡΡ (ΡΠ΅ΡΠ΅Π· Π»ΡΠΌΠ±Π΄Ρ, ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΡ Π² outputs.upToDateWhen{})
Π£ task'Π° Π½Π΅Ρ action'ΠΎΠ² ΠΈ ΠΎΠ½ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ Π΄ΡΡΠ³ΠΈΡ task'ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ UP-TO-DATE, SKIPPED ΠΈΠ»ΠΈ FROM_CACHE
Π£ task'Π° Π½Π΅Ρ Π½ΠΈ action'ΠΎΠ², Π½ΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ
(no label) or EXECUTED β Task ΠΈ Π΅Π³ΠΎ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Π±ΡΠ»ΠΈ Π·Π°ΠΏΡΡΠ΅Π½Ρ
ΠΠ°ΠΊ ΡΠΏΡΠ°Π²Π»ΡΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΠΌΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°ΡΠΊΠ°ΠΌΠΈ
1
dependsOn()
β ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ, ΠΊΠΎΠ³Π΄Π° Task Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π½Π°ΡΠ°ΡΡ ΡΠ°Π±ΠΎΡΡ, ΠΏΠΎΠΊΠ° Π½Π΅ Π·Π°Π²Π΅ΡΡΠΈΡΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π΄ΡΡΠ³ΠΈΡ
task'ΠΎΠ² (ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ ΡΠΏΠΈΡΠΎΠΊ)
2
finalizedBy()
β Π£ΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΠΊΠ°ΠΊΠΎΠΉ ΠΏΠΎΡΠ»Π΅ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡΡ ΡΠ°ΡΠΊ. Finalized task Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡΡ, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΡΠΎΡ, ΠΎΡ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΎΠ½ Π·Π°Π²ΠΈΡΠΈΡ, Π·Π°Π²Π΅ΡΡΠΈΡΡΡ Π½Π΅ΡΠ΄Π°ΡΠ΅ΠΉ.
3
shouldRunAfter()
ΠΈ mustRunAfter()
β ΠΠ°Π΄Π°ΡΡ ΠΏΠΎΡΡΠ΄ΠΎΠΊ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠ°ΡΠΊΠΎΠ² Π±Π΅Π· ΡΠ²Π½ΡΡ
Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ ΠΌΠ΅ΠΆΠ΄Ρ Π½ΠΈΠΌΠΈ. ΠΠ»Π°Π²Π½ΠΎΠ΅ ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ dependsOn
Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΌΠ΅ΡΠΎΠ΄Ρ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ Π²Π»ΠΈΡΡΡ Π½Π° Π·Π°ΠΏΡΡΠΊ ΡΠ°ΡΠΊΠΎΠ², Π° Π’ΠΠΠ¬ΠΠ Π½Π° ΠΏΠΎΡΡΠ΄ΠΎΠΊ.
shouldRunAfter()
β ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ (Π΅ΡΠ»ΠΈ ΠΏΠΎΠ»ΡΡΠΈΠ»ΡΡ ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΠΈΠ»ΠΈ ΠΏΡΠΈ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΠΌ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ)
mustRunAfter()
β ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΡΠ°ΡΠΊΠΎΠ² Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡ Π²ΡΠ΅Π³Π΄Π°
4
Inputs and Outputs
ΠΠ±ΡΡΠ½ΠΎ, Π΅ΡΠ»ΠΈ task Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ Π΄ΡΡΠ³ΠΎΠ³ΠΎ, ΡΠΎ ΠΎΠ½ ΠΆΠ΄Π΅Ρ Π½Π° Π²Ρ ΠΎΠ΄ Π΄Π°Π½Π½ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΡΠΎΠΆΠ΄Π°Π΅Ρ Π΄ΡΡΠ³ΠΎΠΉ task.
Π gradle ΠΌΠΎΠΆΠ½ΠΎ ΡΠ²ΡΠ·Π°ΡΡ Π²Ρ ΠΎΠ΄Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ°ΡΠΊΠ° Ρ Π²ΡΡ ΠΎΠ΄Π½ΡΠΌΠΈ Π΄Π°Π½Π½ΡΠΌΠΈ Π΄ΡΡΠ³ΠΎΠ³ΠΎ, ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ²Π½ΠΎ Π½Π΅ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΡΠ΅ΡΠ΅Π·
dependsOn
.
Π ΠΊΠΎΠ΄Π΅ ΡΡΠΎ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΠΊ
Π€Π°Π·Ρ ΡΠ±ΠΎΡΠΊΠΈ Gradle
Initialization β Gradle ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΡ Π±ΡΠ΄ΡΡ ΡΡΠ°ΡΡΠ²ΠΎΠ²Π°ΡΡ Π² Π±ΠΈΠ»Π΄Π΅ ΠΈ ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΈΠ½ΡΡΠ°Π½ΡΡ Project
Configuration β ΠΠ°ΠΏΡΡΠΊΠ°ΡΡΡΡ Π²ΡΠ΅ ΡΠΊΡΠΈΠΏΡΡ build.gradle Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΡΡ ΡΠ°ΡΠΊΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ², ΡΡΡΠΎΠΈΡΡΡ Π³ΡΠ°Ρ ΡΠ°ΡΠΊΠΎΠ²
Execution β Gradle Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ ΡΠ°ΡΠΊΠΈ Π² Π½ΡΠΆΠ½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π³ΡΠ°ΡΠ°
settings.gradle
ΠΡΠΎΡ ΡΠ°ΠΉΠ» ΡΠ°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΏΠ΅ΡΠ²ΠΎΠΉ ΡΠ°Π·Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ
ΠΡΠ·ΠΎΠ²Ρ Π² ΡΡΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ Π΄Π΅Π»Π΅Π³ΠΈΡΡΡΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ Settings
ΠΠ»Ρ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠΎΠ΄ΡΠ»ΡΠ½ΡΡ (multi-project) ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² settings.gradle Π½ΡΠΆΠ΅Π½ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΡΡΠΎΠ±Ρ Π² Π½Π΅ΠΌ ΠΎΠΏΠΈΡΠ°ΡΡ Π΄Π΅ΡΠ΅Π²ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ²
Project evaluation
ΠΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ°Π·Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Gradle ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΡ ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΠΏΡΠΎΠ΅ΠΊΡΡ, Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ build ΡΠΊΡΠΈΠΏΡ ΠΈ ΡΠΎΠ·Π΄Π°Π΅Ρ ΡΠ°ΡΠΊΠΈ (Gradle ΡΠΌΠ΅Π΅Ρ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ build-ΡΠΊΡΠΈΠΏΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½ΡΠΆΠ½Ρ Π΄Π»Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΡΠΊΠ°)
Π api Π΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ-ΡΠΎ Π΄ΠΎ ΠΈΠ»ΠΈ ΠΏΠΎΡΠ»Π΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ: ΠΌΠ΅ΡΠΎΠ΄Ρ beforeEvaluate() ΠΈ afterEvaluate() Ρ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ²
ΠΡΠΈ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΎΠ±ΡΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΈΠ· ΠΊΠΎΡΠ½Π΅Π²ΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ°, ΡΡΠΎΠ±Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΠΊΠ°ΠΊΡΡ-ΡΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Ρ Π΄ΠΎΡΠ΅ΡΠ½ΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ²
gradle.properties
Π€Π°ΠΉΠ», Π»Π΅ΠΆΠ°ΡΠΈΠΉ Π² ΠΊΠΎΡΠ½Π΅Π²ΠΎΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ΅ (Π° Π΅ΡΠ΅ Π²
GRADLE_USER_HOME
ΠΈ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ gradle Π΄Π»Ρ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΡ ΡΠ²ΠΎΠΉΡΡΠ²).ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ JVM Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° gradle (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ,
org.gradle.jvmargs=-Xmx4096m
)ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΠ°ΠΌΠΎΠ³ΠΎ Gradle
ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΈΡΠ°ΡΡ ΡΠ²ΠΎΠΈ ΡΠ²ΠΎΠΉΡΡΠ²Π°, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ Π΄ΠΎΡΡΡΠΏΠ½Ρ ΠΈΠ· gradle ΡΠΊΡΠΈΠΏΡΠΎΠ²
Π²ΠΌΠ΅ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ gradle.properties, ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ ΡΠ΅ΡΠ΅Π· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡΡ ΡΡΡΠΎΠΊΡ ΡΠ΅ΡΠ΅Π· ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ
-p
(ΡΠ΄ΠΎΠ±Π½ΠΎ Π΄Π»Ρ ΠΊΠ»ΡΡΠ΅ΠΉ, Π»ΠΎΠ³ΠΈΠ½ΠΎΠ² ΠΈ ΠΏΠ°ΡΠΎΠ»Π΅ΠΉ)
Extra properties
ΠΠ½ΠΎΠ³ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΈΠ· Π΄ΠΎΠΌΠ΅Π½Π½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ Gradle (Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ Task ΠΈ Project) ΠΌΠΎΠ³ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π° Π² Π²ΠΈΠ΄Π΅ ΠΊΠ»ΡΡ-Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. ΠΠ»ΡΡ β ΡΡΠΎ ΡΡΡΠΎΠΊΠ°, Π° Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ β ΡΡΠΎ ΠΊΠ»Π°ΡΡ Object.
Π Π΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ
ΠΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΡ ΠΏΡΠ±Π»ΠΈΠΊΡΡΡΡΡ Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ, ΡΡΠΎΠ±Ρ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΌΠΎΠ³ ΠΈΡ ΡΠ΅Π±Π΅ ΠΏΠΎΠ΄ΡΡΠ½ΡΡΡ. Π Π°Π½ΡΡΠ΅ Π±ΡΠ»ΠΈ ΠΏΠΎΠΏΡΠ»ΡΡΠ½Ρ JCenter ΠΈ Google Maven, ΠΎΠ΄Π½Π°ΠΊΠΎ JCenter ΠΎΠ±ΡΡΠ²Π»Π΅Π½ ΠΊΠ°ΠΊ deprecated ΠΈ ΡΠ΅ΠΉΡΠ°Ρ Π΅ΡΡΡ ΡΡΠΈ Π²Π°ΡΠΈΠ°Π½ΡΠ° ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠ΅Π²:
google()
(Google Maven)mavenCentral()
ΠΏΡΠΈΠ²Π°ΡΠ½ΡΠ΅ Maven-ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ
Ivy
Π»ΠΎΠΊΠ°Π»ΡΠ½Π°Ρ ΡΠ°ΠΉΠ»ΠΎΠ²Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ°
ΠΠΎΡΠΌΠΎΡΡΠ΅ΡΡ, ΠΊΠ°ΠΊΠΈΠ΅ Π²Π΅ΡΡΠΈΠΈ Π΄ΠΎΡΡΡΠΏΠ½Ρ Π² ΠΏΡΠ±Π»ΠΈΡΠ½ΡΡ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅:
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ ΠΏΠ°ΠΊΠ΅ΡΠ° org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version
ΡΠ·Π½Π°ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ Π΄ΠΎΡΡΡΠΏΠ½ΡΡ
Π²Π΅ΡΡΠΈΡΡ
Π² ΠΎΡΠΊΡΡΡΡΡ
ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡΡ
ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅: https://mvnrepository.com/artifact/org.jetbrains.kotlin/kotlin-gradle-plugin
Π Π΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΠΊ build-ΡΠΊΡΠΈΠΏΡΡ ΠΈΠ»ΠΈ ΠΊ ΠΏΡΠΎΠ΅ΠΊΡΠ°ΠΌ: ΠΏΠ΅ΡΠ²ΡΠ΅ Π±ΡΠ΄ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π»Ρ ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ² Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ°Π·Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ (ΠΎΠ½ΠΈ Π½ΡΠΆΠ½Ρ gradle), Π²ΡΠΎΡΡΠ΅ β Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ ΠΏΡΠΎΠ΅ΠΊΡΠ° (ΠΎΠ½ΠΈ Π½ΡΠΆΠ½Ρ Π½Π°ΡΠ΅ΠΌΡ ΠΏΡΠΎΠ΅ΠΊΡΡ)
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΡΠ°Π½ΡΠΏΠΎΡΡΠ° ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Ρ
ΠΡΡΡΠ΅ Π½Π΅ ΠΏΡΠΎΠΏΠΈΡΡΠ²Π°ΡΡ Π²ΡΠ΅ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ ΡΠ΅ΡΠ΅Π· allprojects, ΡΡΠΎΠ±Ρ Π½Π΅ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°ΡΡ Π²ΡΠ΅ΠΌΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ
Dependencies
Π£ΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π² ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ ΠΈ Π΄Π»Ρ build-ΡΠΊΡΠΈΠΏΡΠ°
ΠΠ°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Π²Π½Π΅ΡΠ½ΠΈΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ:
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.4")
ΠΡΠΎΠ΅ΠΊΡΠ½ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ:
implementation project(":core")
Π€Π°ΠΉΠ»ΠΎΠ²ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ:
implementation fileTree(dir: 'libs', include: ['*.jar'])
ΠΠ΅ΡΠ΅Π²ΠΎ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ ΡΠ°ΡΠΊΠΈ dependencies β
./gradlew dependencies [--configuration implementation]
.
Modules
ΠΡΠΈΠΌΠ΅Ρ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΡ:
Configurations
ΠΠ°ΠΆΠ΄Π°Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ ΠΊ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡ ΡΠΊΠΎΡΠΏΡ: Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠ°ΠΊΠΈΠ΅-ΡΠΎ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ, ΡΠΎΠ»ΡΠΊΠΎ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ΅ΡΡΠΎΠ², ΡΠΎΠ»ΡΠΊΠΎ Π² runtime ΠΈ Ρ.Π΄.
ΠΠ»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠΊΠΎΡΠΏΠ°ΠΌΠΈ Π² gradle ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Ρ ΡΠ°Π½ΡΡΡΡ Π² ConfigurationContainer
ΠΠΎ ΡΡΡΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ β ΡΡΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ Π΄Π»Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ
ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΈ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡΡΡ ΠΎΡ Π΄ΡΡΠ³ΠΈΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΉ ΡΠ΅ΡΠ΅Π· ΠΌΠ΅ΡΠΎΠ΄ extendsFrom()
ΠΠΎΡΠ΅ΡΠ½ΠΈΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π½Π°ΡΠ»Π΅Π΄ΡΡΡ Π²ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠ²ΠΎΠΈΡ ΡΠΎΠ΄ΠΈΡΠ΅Π»Π΅ΠΉ
ΠΠ±ΡΡΠ½ΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΡΠΎΠ·Π΄Π°ΡΡΡΡ ΠΏΠ»Π°Π³ΠΈΠ½Π°ΠΌΠΈ
ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ gradle ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ (compile ΠΈ runtime β deprecated) Π΄Π»Ρ java gradle plugin:
Π java library plugin Π΅ΡΠ΅ ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ api
. ΠΠ΅ ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ implementation
Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΎΠ½Π° ΠΎΡΠΊΡΡΠ²Π°Π΅Ρ Π΄ΠΎΡΡΡΠΏ ΠΊΠΎ Π²ΡΠ΅ΠΌ Π·Π°Π²ΠΈΡΠΈΠΌΡΠΌ ΠΌΠΎΠ΄ΡΠ»ΡΠΌ (ΡΠ°Π½ΡΡΠ΅ compile
ΡΠ°ΠΊ Π΄Π΅Π»Π°Π» β ΠΎΠ½ ΠΎΡΠΊΡΡΠ²Π°Π» Π΄ΠΎΡΡΡΠΏ ΠΊΠΎ Π²ΡΠ΅ΠΌ Π΄ΠΎΡΠ΅ΡΠ½ΠΈΠΌ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΠΌ, implementation
ΡΠ°ΠΊ Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ).
compileOnly
β ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΠΏΠΎΠ΄Π³ΡΡΠΆΠ°Π΅Ρ ΠΌΠΎΠ΄ΡΠ»Ρ ΡΠΎΠ»ΡΠΊΠΎ Π½Π° ΡΡΠ°ΠΏ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ (ΠΊΠΎΠ³Π΄Π° ΠΌΠΎΠ΄ΡΠ»Ρ Π½Π΅ Π½ΡΠΆΠ΅Π½ Π² runtime). implementation
ΠΏΠΎΠ΄Π³ΡΡΠΆΠ°Π΅Ρ ΠΌΠΎΠ΄ΡΠ»Ρ Π² runtime. ΠΡΠ°ΠΌΠΎΡΠ½ΠΎΠ΅ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ ΠΌΠ΅ΠΆΠ΄Ρ compileOnly
ΠΈ implementation
ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ ΡΡΠΊΠΎΡΠΈΡΡ Π²ΡΠ΅ΠΌΡ ΡΠ±ΠΎΡΠΊΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ°.
Resolution strategy
ΠΠ΅ΠΆΠ΄Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΠΌΠΈ ΠΌΠΎΠ³ΡΡ Π²ΡΡΡΠ΅ΡΠ°ΡΡΡΡ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΡ
ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°ΡΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ gradle ΠΏΡΠΈ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠ°Ρ β ΡΠ΅ΡΠ΅Π· resolution strategy
ΠΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΠΎ-ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ β gradle Π²ΡΠ±ΠΈΡΠ°Π΅Ρ ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ Π²Π΅ΡΡΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ
Π§ΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅Π»Π°ΡΡ ΡΠ΅ΡΠ΅Π· resolution strategy
Π·Π°ΠΌΠ΅Π½ΡΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ (dependencySubstitution)
ΡΠΊΠ°Π·Π°ΡΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ Π²Π΅ΡΡΠΈΡ (force)
Π²ΡΠ±ΠΈΡΠ°ΡΡ ΠΏΡΠΎΠ΅ΠΊΡΠ½ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Π²ΠΌΠ΅ΡΡΠΎ Π±ΠΈΠ½Π°ΡΠ½ΡΡ (preferProjectModules)
ΠΏΠ°Π΄Π°ΡΡ ΠΏΡΠΈ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠ°Ρ (failOnVersionConflict)
ΠΌΠ΅Π½ΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΊΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡΡΡ (snapshot)
Transitive dependencies
Π’ΡΠ°Π½Π·ΠΈΡΠΈΠ²Π½ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ β ΡΡΠΎ Π΄ΠΎΡΠ΅ΡΠ½ΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΏΡΡΠΌΠΎΠΉ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ
Π£ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΉ Π΅ΡΡΡ ΡΠ»Π°Π³ isTransitive(), Π΅ΡΠ»ΠΈ ΠΎΠ½ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ true, ΡΠΎ Π±ΡΠ΄ΡΡ ΡΠ°Π·ΡΠ΅ΡΠ°ΡΡΡΡ Π΄ΠΎΡΠ΅ΡΠ½ΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ
Π’Π°ΠΊΠΎΠΉ ΠΆΠ΅ ΡΠ»Π°Π³ Π΅ΡΡΡ Ρ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ
ΠΠΎ-ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ isTransitive()=true, Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π΅Π³ΠΎ ΠΏΠΎΠΌΠ΅Π½ΡΡΡ
ΠΡΠΎ Π·Π½Π°ΡΠΈΡ, ΡΡΠΎ ΠΌΡ Π½Π΅ ΠΏΠΎΠ΄ΡΡΠ³ΠΈΠ²Π°Π΅ΠΌ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ guava ΠΊ ΡΠ΅Π±Π΅ Π² ΠΏΡΠΎΠ΅ΠΊΡ, Π° ΡΠΊΠ°ΠΆΠ΅ΠΌ ΠΈΡ Π²ΡΡΡΠ½ΡΡ.
Dependency constraints
ΠΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π΄Π»Ρ Π²Π΅ΡΡΠΈΠΉ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ ΡΠ΅ΡΠ΅Π· constraints, Π²ΠΊΠ»ΡΡΠ°Ρ ΡΡΠ°Π½Π·ΠΈΡΠΈΠ²Π½ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ.
Π ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π²ΡΡΠ΅ httpclient
Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ commons-codec
, ΠΈ ΠΌΡ ΡΠ΅ΡΠ΅Π· constraints ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌ ΡΠΈΠΊΡΠΈΡΡΠ΅ΠΌ Π²Π΅ΡΡΠΈΡ ΡΡΠ°Π½Π·ΠΈΡΠΈΠ²Π½ΠΎΠΉ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ.
Excluding transitive dependencies
ΠΠΎΠΆΠ½ΠΎ ΡΠ±ΡΠ°ΡΡ ΡΡΠ°Π½Π·ΠΈΡΠΈΠ²Π½ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΡΠ΅ΡΠ΅Π· exclude (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Ρ Π½Π°Ρ Π΄Π²Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΡΡΠ½ΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ; ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΏΠΎΠΊΠΎΠΉΠ½ΠΎ ΡΠ±ΡΠ°ΡΡ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΏΠΈΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ ΠΈ Π²ΡΠ΅ Π±ΡΠ΄Π΅Ρ ΡΠΏΠΎΠΊΠΎΠΉΠ½ΠΎ ΡΠΎΠ±ΠΈΡΠ°ΡΡΡΡ):
Because
ΠΠΌΠ΅ΡΡΠΎ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅Π² ΠΊ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΠΌ, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ because. ΠΡΠΈ Π²ΡΠ²ΠΎΠ΄Π΅ Π΄Π΅ΡΠ΅Π²Π° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ, ΡΡΠΎΡ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ ΠΎΡΠΎΠ±ΡΠ°Π·ΠΈΡΡΡ Π² ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ :)
Plugins
ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π½Π°ΠΏΠΈΡΠ°Π½Ρ ΡΠΊΡΠΈΠΏΡΠΎΠΌ, ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°ΡΡΡΡ ΠΊΠ°ΠΊ jar (ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ) ΠΈΠ»ΠΈ Π±ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ Π² buildSrc
ΠΠΎΠ±Π°Π²Π»ΡΡΡ ΡΠ°ΡΠΊΠΈ, ΡΠ²ΠΎΠΉΡΡΠ²Π°, Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ, ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ
Π Π°ΡΡΠΈΡΡΡΡ DSL ΠΈ Π΄ΠΎΠΌΠ΅Π½Π½ΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ
Π ΠΎΠ±ΡΠ΅ΠΌ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π΄Π΅Π»Π°ΡΡ Π²ΡΠ΅, ΡΡΠΎ ΡΠ³ΠΎΠ΄Π½ΠΎ
ΠΡΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ ΠΏΠ»Π°Π³ΠΈΠ½Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΡΡΠ°Π²Π»ΡΡΡΡΡ Π²ΠΌΠ΅ΡΡΠ΅ Ρ gradle. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, java plugin, java library plugin.
ΠΡΠΈΠΌΠ΅Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠΊΡΠΈΠΏΡΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠ»Π°Π³ΠΈΠ½Π°:
Binary plugins ΠΈΠΌΠ΅ΡΡ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ, Π΄ΠΎΡΡΡΠΏΠ½Ρ ΠΈΠ· ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°ΡΡΡΡ ΡΠ΅ΡΠ΅Π· ΡΡΠ°ΡΡΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ "apply plugin"
ΠΈΠ»ΠΈ Π±Π»ΠΎΠΊ plugins{}
(Π²ΡΠ΅Π³Π΄Π° Π»ΡΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ).
SourceSets
Java Plugin (ΠΈΠ»ΠΈ Kotlin Plugin) Π²Π½ΠΎΡΠΈΡ Π² Π΄ΠΎΠΌΠ΅Π½Π½ΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ Gradle ΡΠ°ΠΊΠΎΠ΅ ΠΏΠΎΠ½ΡΡΠΈΠ΅ ΠΊΠ°ΠΊ source set
Source Sets ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π³ΡΡΠΏΠΏΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΅ΡΡΡΡΡ ΠΈ ΠΈΡΡ ΠΎΠ΄Π½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ Π² Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π³ΡΡΠΏΠΏΡ
Java Plugin ΡΠΎΠ·Π΄Π°Π΅Ρ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Source Set ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΡΠ°ΡΠΊ compileSourceSetJava ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΉ (Π΄Π»Ρ Source Set "main" ΠΈΠΌΡ ΠΎΠΏΡΡΠΊΠ°Π΅ΡΡΡ β compileJava)
ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ Π΄Π»Ρ ΡΠ΅ΡΡΡΡΠΎΠ² ΡΠΎΠ·Π΄Π°ΡΡΡΡ ΡΠ°ΡΠΊΠΈ processSourceSetResources.
ΠΡΠΈΠΌΠ΅Ρ:
Flavors & BuildTypes
Build types β ΡΠΈΠΏΡ ΡΠ±ΠΎΡΠΎΠΊ, ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΠΎΠ·Π΄Π°ΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ release ΠΈ debug, ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π½Π°Π»ΠΈΡΠΈΠ΅ Ρ ΠΎΡΡ Π±Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°
Product flavors β ΡΠ°Π·Π³ΡΠ°Π½ΠΈΡΠΈΠ²Π°ΡΡ ΡΠ±ΠΎΡΠΊΠΈ ΠΏΠΎ ΡΠΈΡΠ°ΠΌ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠ»Π°ΡΠ½Π°Ρ Π²Π΅ΡΡΠΈΡ ΠΈ Ρ ΡΡΠ΅Π·Π°Π½Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡΡ)
Build variants β Π²ΡΠ΅ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΈ ΠΌΠ΅ΠΆΠ΄Ρ Build types ΠΈ Product flavors
Π Π΄ΠΎΠΌΠ΅Π½Π½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΌΠΈ ΠΊΠ»Π°ΡΡΠ°ΠΌΠΈ: BuildType, ProductFlavor ΠΈ BaseVariant (ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ BuildType ΠΈ ProductFlavor)
BuildType ΠΈ ProductFlavor Π½Π°ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΎΡ BaseConfigImpl
ΠΠ»Ρ Π²ΡΠ΅Ρ Π½ΠΈΡ ΡΠΎΠ·Π΄Π°ΡΡΡΡ source set'Ρ ΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΡΠ°ΡΠΊΠΈ.
flavor dimension
- ΠΏΠΎΠ΄ ΡΡΠΈΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
, Π½Π΅ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ Π½Π°Π±ΠΎΡ. ΠΡΠΈΠΌΠ΅Ρ:
productFlavors
- Π·Π΄Π΅ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π΄Π»Ρ dimension
. ΠΡΠΈΠΌΠ΅Ρ:
ΠΠ΄Π΅ΡΡ: Π² ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈ endpoint ΠΌΠΎΠ³ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π½Π°Π±ΠΎΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ²: prod, staging
ΠΠ°Π»Π΅Π΅, ΡΡΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ buildTypes (ΠΊΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ?)
Kotlin & Groovy DSL
Gradle Kotlin DSL Usage: https://github.com/IkeMurami-Examples/AndroidAppExamples/tree/main/KotlinDSLUsage
buildSrc & Version Catalog
ΠΡΠΎΠ±Π°Ρ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ Gradle, Π² ΠΊΠΎΡΠΎΡΡΡ Π²ΡΠ½ΠΎΡΡΡΡΡ:
ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ
Π²Π½Π΅ΡΠ½ΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΈ Π²Π΅ΡΡΠΈΠΈ
ΠΈΠΌΠ΅Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² ΠΈ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ
ΡΠ°ΡΠΊΠΈ Π΄Π»Ρ ΡΠ±ΠΎΡΠΊΠΈ
ΠΏΠ»Π°Π³ΠΈΠ½Ρ Π΄Π»Ρ ΡΠ±ΠΎΡΠΊΠΈ
ΠΡΠΈΠΌΠ΅Ρ: https://github.com/IkeMurami-Examples/KotlinMultiplatformExample
ΠΠ»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π° ΡΡΠΎΠΌΡ β ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Version Catalog (ΠΏΠΎΡΠ²ΠΈΠ»ΡΡ Π² 7-ΠΉ Π²Π΅ΡΡΠΈΠΈ Gradle ΠΈ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ Ρ Kotlin DSL) ΠΊΠ°ΠΊ Π΅Π΄ΠΈΠ½ΠΎΠ΅ ΠΌΠ΅ΡΡΠΎ Ρ ΡΠ°Π½Π΅Π½ΠΈΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ Π²Π΅ΡΡΠΈΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ. ΠΠΎΡΠΈΡΠ°ΡΡ ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅: https://habr.com/ru/post/560868/
ΠΠ»Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΡΡΠΎΠΉ ΡΠΈΡΠΈ, Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Π² settings.gradle.kts
:
ΠΈ Π² ΠΏΠ°ΠΏΠΊΠ΅ gradle ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΠΌ toml-ΡΠ°ΠΉΠ» libs.versions.toml
.
Last updated