A Gradle használata

Szerkesztés

A Kotlin projekt Gradle segítségével történő építéséhez a Kotlin Gradle bővítményt kell a projektre alkalmazni és a függőségeket konfigurálni.

Plugin és verziók

A Kotlin Gradle plugint a Gradle plugins DSL segítségével alkalmazza.

A Kotlin Gradle plugin 1.4.30 a Gradle 5.4 és újabb verziókkal működik. A kotlin-multiplatform pluginhoz a Gradle 6.0 vagy újabb verziója szükséges.

plugins { id 'org.jetbrains.kotlin.<...>' version '1.4.30'}
plugins { kotlin("<...>") version "1.4.30"}

A <...> helyőrzőt a további szakaszokban található plugin nevek valamelyikével kell helyettesíteni.

Targeting multiple platforms

A több platformot megcélzó, úgynevezett multiplatform projektekhez a kotlin-multiplatform plugin szükséges. Tudjon meg többet a bővítményről.

A kotlin-multiplatform bővítmény a Gradle 6.0 vagy újabb verzióval működik.

plugins { id 'org.jetbrains.kotlin.multiplatform' version '1.4.30'}
plugins { kotlin("multiplatform") version "1.4.30"}

A JVM célzása

A JVM célzásához alkalmazza a Kotlin JVM bővítményt.

plugins { id "org.jetbrains.kotlin.jvm" version "1.4.30"}
plugins { kotlin("jvm") version "1.4.30"}

A version ebben a blokkban szó szerint kell lennie, és nem alkalmazható más build scriptből.

Alternatívaként használhatja a régebbi apply plugin megközelítést:

apply plugin: 'kotlin'

A Gradle Kotlin DSL-ben nem ajánlott a apply Kotlin bővítmények apply alkalmazásával – lásd miért.

Kotlin és Java források

A Kotlin források tárolhatók a Java forrásokkal egy mappában, vagy különböző mappákba helyezhetők. Az alapértelmezett konvenció a különböző mappák használata:

project - src - main (root) - kotlin - java

A megfelelő sourceSets tulajdonságot kell frissíteni, ha nem az alapértelmezett konvenciót használjuk:

sourceSets { main.kotlin.srcDirs += 'src/main/myKotlin' main.java.srcDirs += 'src/main/myJava'}
sourceSets.main { java.srcDirs("src/main/myJava", "src/main/myKotlin")}

Célzott JavaScript

Ahol csak JavaScriptet célozunk, használjuk a kotlin-js bővítményt. További információ

plugins { id 'org.jetbrains.kotlin.js' version '1.4.30'}
plugins { kotlin("js") version "1.4.30"}

Kotlin és Java források

Ez a plugin csak Kotlin fájlokra működik, ezért ajánlott a Kotlin és Java fájlokat külön tartani (amennyiben a projekt Java fájlokat tartalmaz). Ha nem tárolja őket külön , adja meg a forrásmappát a sourceSets blokkban:

kotlin { sourceSets { main.kotlin.srcDirs += 'src/main/myKotlin' }}
kotlin { sourceSets.apply { kotlin.srcDir("src/main/myKotlin") }}

Targeting Android

Android alkalmazások készítéséhez ajánlott az Android Studio használata. Ismerje meg az Android Gradle plugin használatát.

Függőségek beállítása

A függőség hozzáadásához egy könyvtár függőségét a forráskészlet DSL dependencies blokkjában állítsa be a szükséges típusú függőséget (például implementation).

kotlin { sourceSets { val commonMain by getting { dependencies { implementation("com.example:my-library:1.0") } } }}

Alternatívaként a függőségeket felső szinten is beállíthatja.

Függőségi típusok

A függőségi típus kiválasztása a követelmények alapján.

Type Description When to use
api A fordítás során és futásidőben is használjuk, és a könyvtárfogyasztóknak exportáljuk. Ha az aktuális modul nyilvános API-jában a függőség bármelyik típusa használatos, használjon api függőséget.
implementation A fordítás során és futásidőben az aktuális modul számára használatos, de a `implementációs` függőséggel rendelkező modultól függő más modulok fordításakor nem kerül kiállításra.

A modul belső logikájához szükséges függőségek esetén használja.

Ha a modul egy nem publikált végponti alkalmazás, akkor a api függőségek helyett a implementation függőségeket használja.

compileOnly Az aktuális modul fordításához használatos, és sem futásidőben, sem más modulok fordítása során nem áll rendelkezésre. Az olyan API-k esetében használható, amelyeknek futásidőben elérhető egy harmadik féltől származó implementációja.
runtimeOnly Futásidőben elérhető, de egyik modul fordítása során sem látható.

Függés a szabványos könyvtárra

A szabványos könyvtár függősége (stdlib) minden forráskészlethez automatikusan hozzáadódik. A szabványos könyvtár verziója megegyezik a Kotlin Gradle plugin verziójával.

A platform-specifikus forráskészletek esetében a könyvtár megfelelő platform-specifikus változata kerül felhasználásra, míg a többihez egy közös szabványos könyvtár kerül hozzáadásra. A Kotlin Gradle plugin a megfelelő JVM szabványos könyvtárat választja ki a Gradle build script kotlinOptions.jvmTarget fordítói opciójától függően.

Ha explicit módon deklarál egy szabványos könyvtárfüggőséget (például ha más verzióra van szüksége), a Kotlin Gradle plugin nem írja felül azt, és nem ad hozzá egy második szabványos könyvtárat.

Ha egyáltalán nincs szüksége szabványos könyvtárra, akkor a gradle.properties-hoz hozzáadhatja az opt-out jelzőt:

kotlin.stdlib.default.dependency=false

Tesztkönyvtárak függőségének beállítása

A kotlin.test API különböző Kotlin projektek teszteléséhez áll rendelkezésre.

Adja hozzá a megfelelő függőségeket a tesztkönyvtárakhoz:

  • A commonTest esetében adja hozzá a kotlin-test-common és kotlin-test-annotations-common függőségeket.
  • A JVM célokhoz használja a kotlin-test-junit vagy a kotlin-test-testng megfelelő asserter implementációt és az annotációk leképezését.
  • A Kotlin/JS célokhoz adja hozzá a kotlin-test-js tesztfüggőséget.

A Kotlin/Native célokhoz nincs szükség további tesztfüggőségekre, és a kotlin.test API implementációk beépítettek.

Egy Kotlin-modul függőségére használhat rövidítést, például kotlin(“test”) az “org.jetbrains.kotlin:kotlin-test”-re.

Függőség beállítása egy kotlinx könyvtárra

Ha egy kotlinx könyvtárat használ, és szüksége van egy platform-specifikus függőségre, használhatja a könyvtárak platform-specifikus változatait olyan utótagokkal, mint -jvm vagy -js, például kotlinx-coroutines-core-jvm. Használhatja helyette a könyvtár alap artifact nevét is – kotlinx-coroutines-core.

kotlin { sourceSets { jvmMain { dependencies { implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.4.2' } } }}

Ha többplatformos könyvtárat használ, és szüksége van a megosztott kódtól való függésre, a függőséget csak egyszer állítsa be a megosztott forráskészletben. Használja a könyvtár alap artifact nevét, például kotlinx-coroutines-core vagy ktor-client-core.

kotlin { sourceSets { commonMain { dependencies { implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.4.2' } } }}

Függőségek beállítása legfelső szinten

Alternatívaként megadhatja a függőségeket legfelső szinten a <sourceSetName><DependencyType> mintát követő konfigurációs nevekkel. Ez hasznos néhány Gradle beépített függőség esetében, mint például gradleApi(), localGroovy() vagy gradleTestKit(), amelyek nem állnak rendelkezésre a forráskészlet függőségi DSL-ben.

dependencies { "commonMainImplementation"("com.example:my-library:1.0")}

Jegyzetfeldolgozás

A Kotlin támogatja a jegyzetfeldolgozást a Kotlin jegyzetfeldolgozó eszközzel kapt.

Inkrementális fordítás

A Kotlin Gradle plugin támogatja az inkrementális fordítást. Az inkrementális fordítás nyomon követi a forrásfájlok változásait a buildek között, így csak az ezen változások által érintett fájlok kerülnek lefordításra.

Az inkrementális fordítás támogatott a Kotlin/JVM és Kotlin/JS projektek esetében, és alapértelmezés szerint a Kotlin 1.1.1 óta engedélyezve van.

A beállítás letiltásának több módja is van:

  • Adja hozzá a következő sort a gradle.properties vagy local.properties fájlhoz:
    • kotlin.incremental=false Kotlin/JVM
    • kotlin.incremental.js=false Kotlin/JS projektek
  • A parancssori paraméterként használja a -Pkotlin.incremental=false vagy -Pkotlin.incremental.js=false paramétert.

    Megjegyezzük, hogy ebben az esetben a paramétert minden további buildhez hozzá kell adni, és minden olyan build, amelynél az inkrementális fordítás le van tiltva, érvényteleníti az inkrementális gyorsítótárakat.

Megjegyezzük, hogy az első build semmiképpen sem inkrementális.

Gradle build cache támogatása

A Kotlin bővítmény támogatja a Gradle build cache-t, amely tárolja a build kimeneteit a későbbi buildek során történő újrafelhasználás céljából.

A cache letiltásához minden Kotlin feladat esetében állítsa a kotlin.caching.enabled rendszer tulajdonság flag-et false-ra (futtassa a buildet a -Dkotlin.caching.enabled=false argumentummal).

Ha kapt-ot használ, vegye figyelembe, hogy a kapt annotation feldolgozási feladatok alapértelmezés szerint nem kerülnek cache-be. Azonban manuálisan engedélyezheti a gyorsítótárazást számukra.

Gradle konfigurációs gyorsítótár támogatása

A konfigurációs gyorsítótár a Gradle 6.5 és újabb verziókban kísérleti funkcióként érhető el.A Gradle releases oldalán megnézheti, hogy a funkciót stabilra léptették-e elő.

A Kotlin plugin támogatja a Gradle konfigurációs gyorsítótárát,amely a konfigurációs fázis eredményeinek újrafelhasználásával felgyorsítja az építési folyamatot.

A Gradle dokumentációból megtudhatja, hogyan engedélyezheti a konfigurációs gyorsítótárat. A konfigurációs gyorsítótár funkció engedélyezése után a Kotlin Gradle plugin elkezdi használni azt.

Compiler options

A további fordítási opciók megadásához használja a Kotlin fordítási feladat kotlinOptions tulajdonságát.

A JVM megcélzásakor a feladatok neve compileKotlin a termelési kódhoz és compileTestKotlin a tesztkódhoz. Az egyéni forráskészletekhez tartozó feladatokat a compile<Name>Kotlin mintának megfelelően hívjuk.

Az Android Projektekben a feladatok nevei tartalmazzák a build variánsok nevét, és a compile<BuildVariant>Kotlin mintát követik, például compileDebugKotlin, compileReleaseUnitTestKotlin.

A JavaScript célzása esetén a feladatok neve compileKotlinJs, illetve compileTestKotlinJs, az egyéni forráskészletek esetében pedig compile<Name>KotlinJs.

Egyetlen feladat konfigurálásához használjuk annak nevét. Példák:

compileKotlin { kotlinOptions.suppressWarnings = true}//orcompileKotlin { kotlinOptions { suppressWarnings = true }}

Figyeljen arra, hogy a Gradle Kotlin DSL esetén a feladatot először a projekt tasks-ből kell megszereznie.

A JS és Common célokhoz ennek megfelelően a Kotlin2JsCompile és KotlinCompileCommon típusokat használja.

A projektben az összes Kotlin fordítási feladatot is beállíthatja:

tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach { kotlinOptions { /*...*/ }}
tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile>().configureEach { kotlinOptions { /*...*/ }}

A Gradle feladatok beállításainak teljes listája a következő:

A JVM, JS közös attribútumai, és JS DCE

Név leírás lehetséges értékek alapértelmezett érték
allWarningsAsErrors Hiba jelentése, ha vannak figyelmeztetések false
suppressWarnings Nem generál figyelmeztetéseket false
verbose Szöveges naplózási kimenet engedélyezése . false
freeCompilerArgs A további fordítói argumentumok listája

A JVM és JS közös attribútumai

Attribútumok. JVM-specifikus

.

Név leírás lehetséges értékek alapértelmezett érték
javaParameters Metaadatok generálása a Java 1 számára.8 reflection on method parameters false
jdkHome Inklimentálja az egyéni JDK-t a megadott helyről a classpath helyett az alapértelmezett JAVA_HOME
jvmTarget A generált JVM bytecode célverziója “1.6”, “1.8”, “9”, “10”, “11”, “12”, “13”, “14”, “15” “1.6”
noJdk Ne vegye fel automatikusan a Java futtatási időt a classpathba false
noReflect Ne vegye fel automatikusan a Kotlin reflexiót a classpathba. classpath true
noStdlib Don’t automatically include the Kotlin/JVM stdlib and Kotlin reflection into the classpath true
useIR Az IR backend használata false

A JS-re jellemző attribútumok

.

.

Név leírás lehető értékek alapértelmezett érték
friendModulesDisabled Belső deklaráció exportjának kikapcsolása false
main Meghatározza, hogy a mainfüggvényt végrehajtáskor meg kell-e hívni “call”, “noCall” “call”
metaInfo Generálja .meta.js és .kjsm fájlokat metaadatokkal. Használja könyvtár létrehozásához true
moduleKind A fordító által generált JS modul típusa “umd”, “commonjs”, “amd”, “plain” “umd”
noStdlib Ne vegye fel automatikusan az alapértelmezett Kotlin/JS stdlib-et a fordítási függőségekbe true
outputFile Cél *.js fájl a fordítás eredményének “<buildDir>/js/packages/<projekt.név>/kotlin/<projekt.név>.js”
sourceMap Generate source map true
sourceMapEmbedSources Embed source files into source map “never”, “always”, “inlining”
sourceMapPrefix Add a megadott előtagot az elérési utakhoz a forrástérképben
target JS fájlok generálása adott ECMA verzióhoz “v5” “v5”
typedArrays Primitív tömbök fordítása JS tipizált tömbökké true

Dokumentáció generálása

Kotlin projektek dokumentációjának generálása, használja a Dokkát;Kérjük, olvassa el a Dokka README-jét a konfigurációs utasításokért. A Dokka támogatja a vegyes nyelvű projekteket, és többféle formátumban képes kimenetet generálni, beleértve a szabványos JavaDoc-ot is.

OSGi

Az OSGi támogatással kapcsolatban lásd a Kotlin OSGi oldalt.

A Gradle Kotlin DSL

A Gradle Kotlin DSL használata esetén a Kotlin bővítményeket a plugins { ... } blokk segítségével alkalmazza. Ha ehelyett a apply { plugin(...) } blokkal alkalmazza őket, előfordulhat, hogy a Gradle Kotlin DSL által generált bővítményekre vonatkozó megoldatlan hivatkozásokkal találkozik. Ezt úgy oldhatja meg, hogy kikommenteli a hibás felhasználásokat, lefuttatja a Gradle feladatot kotlinDslAccessorsSnapshot, majd visszakommenteli a felhasználásokat, és újra lefuttatja a buildet, vagy újra importálja a projektet az IDE-be.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.