Edit Page
Pentru a construi un proiect Kotlin cu Gradle, trebuie să aplicați plugin-ul Kotlin Gradle la proiectul dumneavoastră și să configurați dependențele.
- Plugin și versiuni
- Tintirea mai multor platforme
- Tintirea JVM
- Surse Kotlin și Java
- Tintirea JavaScript
- Surse Kotlin și Java
- Tarifarea Android
- Configurarea dependențelor
- Tipuri de dependență
- Dependență de biblioteca standard
- Set dependencies on test libraries
- Stabilește o dependență de o bibliotecă kotlinx
- Setați dependențele la nivel superior
- Procesarea adnotărilor
- Compilare incrementală
- Suportul cache-ului de compilare Gradle
- Suportul cache-ului de configurare Gradle
- Opțiuni de compilare
- Atribute comune pentru JVM, JS, și JS DCE
- Atributuri comune pentru JVM și JS
- Atributuri specifice pentru JVM
- Atribute specifice pentru JS
- Generarea de documentație
- OSGi
- Utilizarea Gradle Kotlin DSL
Plugin și versiuni
Aplicați pluginul Kotlin Gradle folosind Gradle plugins DSL.
Plinul Kotlin Gradle 1.4.30 funcționează cu Gradle 5.4 și versiunile ulterioare. Plugin-ul kotlin-multiplatform
necesită Gradle 6.0 sau o versiune ulterioară.
plugins { id 'org.jetbrains.kotlin.<...>' version '1.4.30'}
plugins { kotlin("<...>") version "1.4.30"}
Substitutul <...>
trebuie înlocuit cu unul dintre numele plugin-urilor care pot fi găsite în secțiunile ulterioare.
Tintirea mai multor platforme
Proiectele care vizează mai multe platforme, numite proiecte multiplatformă, necesită plugin-ul kotlin-multiplatform
. Aflați mai multe despre acest plugin.
Principiul
kotlin-multiplatform
funcționează cu Gradle 6.0 sau o versiune ulterioară.
plugins { id 'org.jetbrains.kotlin.multiplatform' version '1.4.30'}
plugins { kotlin("multiplatform") version "1.4.30"}
Tintirea JVM
Pentru a ținti JVM, aplicați pluginul Kotlin JVM.
plugins { id "org.jetbrains.kotlin.jvm" version "1.4.30"}
plugins { kotlin("jvm") version "1.4.30"}
Literalul version
trebuie să fie literal în acest bloc și nu poate fi aplicat dintr-un alt script de compilare.
Alternativ, puteți utiliza abordarea mai veche apply plugin
:
apply plugin: 'kotlin'
Nu este recomandat să aplicați plugin-uri Kotlin cu apply
în Gradle Kotlin DSL – vedeți de ce.
Surse Kotlin și Java
Sursele Kotlin pot fi stocate împreună cu sursele Java în același dosar, sau plasate în dosare diferite. Convenția implicită este folosirea unor dosare diferite:
project - src - main (root) - kotlin - java
Proprietatea sourceSets
corespunzătoare trebuie actualizată dacă nu se folosește convenția implicită:
sourceSets { main.kotlin.srcDirs += 'src/main/myKotlin' main.java.srcDirs += 'src/main/myJava'}
sourceSets.main { java.srcDirs("src/main/myJava", "src/main/myKotlin")}
Tintirea JavaScript
Când se țintește doar JavaScript, folosiți pluginul kotlin-js
. Aflați mai multe
plugins { id 'org.jetbrains.kotlin.js' version '1.4.30'}
plugins { kotlin("js") version "1.4.30"}
Surse Kotlin și Java
Acest plugin funcționează numai pentru fișierele Kotlin, astfel încât este recomandat să păstrați separat fișierele Kotlin și Java (în cazul în care proiectul conține fișiere Java). Dacă nu le păstrați separat , specificați folderul sursei în blocul sourceSets
:
kotlin { sourceSets { main.kotlin.srcDirs += 'src/main/myKotlin' }}
kotlin { sourceSets.apply { kotlin.srcDir("src/main/myKotlin") }}
Tarifarea Android
Se recomandă să utilizați Android Studio pentru crearea de aplicații Android. Aflați cum să utilizați pluginul Android Gradle.
Configurarea dependențelor
Pentru a adăuga o dependență de o bibliotecă, setați dependența de tipul necesar (de exemplu, implementation
) în blocul dependencies
din DSL-ul de setări sursă.
kotlin { sourceSets { commonMain { dependencies { implementation 'com.example:my-library:1.0' } } }}
kotlin { sourceSets { val commonMain by getting { dependencies { implementation("com.example:my-library:1.0") } } }}
Alternativ, puteți seta dependențele la nivel superior.
Tipuri de dependență
Alegeți tipul de dependență în funcție de cerințele dumneavoastră.
Tip | Descriere | Când se utilizează |
---|---|---|
api |
Se utilizează atât în timpul compilării, cât și în timpul execuției și se exportă către consumatorii de biblioteci. | Dacă orice tip dintr-o dependență este utilizat în API-ul public al modulului curent, utilizați o dependență api . |
implementation |
Utilizat în timpul compilării și în timpul execuției pentru modulul curent, dar nu este expus pentru compilarea altor module care depind de cel cu dependența `implementare`. |
Utilizați pentru dependențele necesare pentru logica internă a unui modul. Dacă un modul este o aplicație endpoint care nu este publicată, utilizați dependențele |
compileOnly |
Utilizat pentru compilarea modulului curent și nu este disponibil în timpul execuției și nici în timpul compilării altor module. | Utilizat pentru API-uri care au o implementare terță parte disponibilă în timpul execuției. |
runtimeOnly |
Disponibil la momentul execuției, dar nu este vizibil în timpul compilării niciunui modul. |
Dependență de biblioteca standard
Se adaugă automat o dependență de o bibliotecă standard (stdlib
) în fiecare set de surse. Versiunea bibliotecii standard este aceeași cu versiunea pluginului Kotlin Gradle.
Pentru seturile de surse specifice platformei, se utilizează varianta specifică platformei corespunzătoare a bibliotecii, în timp ce pentru restul se adaugă o bibliotecă standard comună. Plugin-ul Kotlin Gradle va selecta biblioteca standard JVM corespunzătoare în funcție de opțiunea de compilare kotlinOptions.jvmTarget
din scriptul de compilare Gradle.
Dacă declarați explicit o dependență de bibliotecă standard (de exemplu, dacă aveți nevoie de o versiune diferită), plugin-ul Kotlin Gradle nu o va suprascrie și nu va adăuga o a doua bibliotecă standard.
Dacă nu aveți nevoie deloc de o bibliotecă standard, puteți adăuga stegulețul opt-out la gradle.properties
:
kotlin.stdlib.default.dependency=false
Set dependencies on test libraries
API-ul kotlin.test
este disponibil pentru testarea diferitelor proiecte Kotlin.
Adaugați dependențele corespunzătoare pe bibliotecile de testare:
- Pentru
commonTest
, adăugați dependențelekotlin-test-common
șikotlin-test-annotations-common
. - Pentru țintele JVM, utilizați
kotlin-test-junit
saukotlin-test-testng
pentru implementarea asertorului corespunzător și maparea adnotărilor. - Pentru țintele Kotlin/JS, adăugați
kotlin-test-js
ca dependență de testare.
Țintele Kotlin/Native nu necesită dependențe de testare suplimentare, iar implementările API kotlin.test
sunt încorporate.
Puteți utiliza prescurtări pentru o dependență de un modul Kotlin, de exemplu, kotlin(„test”) pentru „org.jetbrains.kotlin:kotlin-test”.
Stabilește o dependență de o bibliotecă kotlinx
Dacă utilizați o bibliotecă kotlinx și aveți nevoie de o dependență specifică platformei, puteți utiliza variante de biblioteci specifice platformei cu sufixe precum -jvm
sau -js
, de exemplu, kotlinx-coroutines-core-jvm
. De asemenea, puteți utiliza în schimb numele artefactului de bază al bibliotecii – kotlinx-coroutines-core
.
kotlin { sourceSets { jvmMain { dependencies { implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.4.2' } } }}
Dacă utilizați o bibliotecă multiplatformă și aveți nevoie să depindeți de codul partajat, setați dependența o singură dată în setul de surse partajate. Folosiți numele artefactului de bază al bibliotecii, cum ar fi kotlinx-coroutines-core
sau ktor-client-core
.
kotlin { sourceSets { commonMain { dependencies { implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.4.2' } } }}
Setați dependențele la nivel superior
Alternativ, puteți specifica dependențele la nivel superior cu nume de configurare care urmează modelul <sourceSetName><DependencyType>
. Acest lucru este util pentru unele dependențe încorporate Gradle, cum ar fi gradleApi()
, localGroovy()
sau gradleTestKit()
, care nu sunt disponibile în DSL-ul de dependență a seturilor de surse.
dependencies { commonMainImplementation 'com.example:my-library:1.0'}
dependencies { "commonMainImplementation"("com.example:my-library:1.0")}
Procesarea adnotărilor
Kotlin suportă procesarea adnotărilor prin intermediul instrumentului de procesare a adnotărilor Kotlin kapt
.
Compilare incrementală
Plinul Kotlin Gradle suportă compilarea incrementală. Compilarea incrementală urmărește modificările fișierelor sursă între compilări, astfel încât doar fișierele afectate de aceste modificări să fie compilate.
Compilarea incrementală este suportată pentru proiectele Kotlin/JVM și Kotlin/JS și este activată în mod implicit de la Kotlin 1.1.1.1.
Există mai multe moduri de a dezactiva setarea:
- Adaugați următoarea linie la fișierul
gradle.properties
saulocal.properties
:-
kotlin.incremental=false
pentru proiecte Kotlin/JVM -
kotlin.incremental.js=false
pentru proiecte Kotlin/JS
-
-
Ca parametru de linie de comandă, utilizați
-Pkotlin.incremental=false
sau-Pkotlin.incremental.js=false
.Rețineți că, în acest caz, parametrul trebuie adăugat la fiecare compilare ulterioară, iar orice compilare cu compilarea incrementală dezactivată invalidează cache-urile incrementale.
Rețineți că prima compilare nu este incrementală în nici un caz.
Suportul cache-ului de compilare Gradle
Principalul Kotlin suportă cache-ul de compilare Gradle care stochează ieșirile de compilare pentru reutilizare în compilări viitoare.
Pentru a dezactiva cache-ul pentru toate sarcinile Kotlin, setați flag-ul proprietății de sistem kotlin.caching.enabled
la false
(rulați compilarea cu argumentul -Dkotlin.caching.enabled=false
).
Dacă utilizați kapt, rețineți că sarcinile de procesare a adnotărilor kapt nu sunt stocate în cache în mod implicit. Cu toate acestea, puteți activa caching-ul pentru ele manual.
Suportul cache-ului de configurare Gradle
Cache-ul de configurare este disponibil în Gradle 6.5 și versiunile ulterioare ca o caracteristică experimentală. puteți verifica pagina de versiuni Gradle pentru a vedea dacă a fost promovat la stabil.
Principiul Kotlin suportă cache-ul de configurare Gradle,care accelerează procesul de construire prin reutilizarea rezultatelor fazei de configurare.
Vezi documentația Gradlepentru a afla cum să activezi cache-ul de configurare. Odată ce ați activat caracteristica cache de configurare, pluginul Gradle Kotlin va începe să o folosească.
Opțiuni de compilare
Pentru a specifica opțiuni suplimentare de compilare, utilizați proprietatea kotlinOptions
a unei sarcini de compilare Kotlin.
Când vizează JVM, sarcinile se numesc compileKotlin
pentru codul de producție și compileTestKotlin
pentru codul de testare. Sarcinile pentru seturile de surse personalizate se numesc în conformitate cu modelul compile<Name>Kotlin
.
Numele sarcinilor din Android Projects conțin numele variantei de compilare și urmează modelul compile<BuildVariant>Kotlin
, de exemplu, compileDebugKotlin
, compileReleaseUnitTestKotlin
.
Când vizează JavaScript, sarcinile se numesc compileKotlinJs
și, respectiv, compileTestKotlinJs
și compile<Name>KotlinJs
pentru seturile de surse personalizate.
Pentru a configura o singură sarcină, utilizați numele acesteia. Exemple:
compileKotlin { kotlinOptions.suppressWarnings = true}//orcompileKotlin { kotlinOptions { suppressWarnings = true }}
Rețineți că, cu Gradle Kotlin DSL, trebuie să obțineți mai întâi sarcina din tasks
din proiect.
Utilizați tipurile Kotlin2JsCompile
și KotlinCompileCommon
pentru țintele JS și Common, în mod corespunzător.
De asemenea, este posibil să configurați toate sarcinile de compilare Kotlin din proiect:
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach { kotlinOptions { /*...*/ }}
tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile>().configureEach { kotlinOptions { /*...*/ }}
Lista completă de opțiuni pentru sarcinile Gradle este următoarea:
Atribute comune pentru JVM, JS, și JS DCE
Nume | Descriere | Valori posibile | Valoare implicită | ||
---|---|---|---|---|---|
allWarningsAsErrors |
Raportează o eroare în cazul în care există avertismente | false | |||
suppressWarnings |
Nu generează avertismente | false | false | ||
verbose |
Activați ieșirea verbose logging | . | false | ||
freeCompilerArgs |
O listă de argumente suplimentare ale compilatorului |
Atributuri comune pentru JVM și JS
Atributuri specifice pentru JVM
Nume | Descriere | Valori posibile | Valoare implicită | ||
---|---|---|---|---|---|
javaParameters |
Generați metadate pentru Java 1.8 reflection pe parametrii metodei | false | |||
jdkHome |
Includeți un JDK personalizat din locația specificată în classpath în locul celui implicit JAVA_HOME | ||||
jvmTarget |
Versiunea țintă a bytecode-ului JVM generat | „1.6”, „1.8”, „9”, „10”, „11”, „12”, „13”, „14”, „15” | „1.6” | ||
noJdk |
Nu includeți automat timpul de execuție Java în classpath | false | |||
noReflect |
Nu includeți automat reflecția Kotlin în classpath | . classpath | true | ||
noStdlib |
Nu includeți automat stdlib Kotlin/JVM și reflecția Kotlin în classpath | true | |||
useIR |
Utilizați backend-ul IR | false |
Atribute specifice pentru JS
Nume | Descriere | Valori posibile | Valoare implicită | |
---|---|---|---|---|
friendModulesDisabled |
Dezactivează exportul declarațiilor interne | false | ||
main |
Define dacă funcția main trebuie să fie apelată la execuție |
„call”, „noCall” | „call” | |
metaInfo |
Generați .meta.js și fișiere .kjsm cu metadate. Se utilizează pentru a crea o bibliotecă | true | ||
moduleKind |
Ce tip de modul JS generat de compilator | „umd”, „commonjs”, „amd”, „plain” | „umd” | |
noStdlib |
Nu include automat stdlib-ul implicit Kotlin/JS în dependențele de compilare | true | ||
outputFile |
Destinație *.js pentru rezultatul compilării | „<buildDir>/js/packages/<project.name>/kotlin/<project.name>.js” | ||
sourceMap |
Generate source map | true | ||
sourceMapEmbedSources |
Embed source files into source map | „never”, „always”, „inlining” | ||
sourceMapPrefix |
Adaugați prefixul specificat la căile din harta sursei | |||
target |
Generați fișiere JS pentru o anumită versiune ECMA | „v5” | „v5” | |
typedArrays |
Traduceți array-urile primitive în array-uri tipizate JS | true |
Generarea de documentație
Pentru a genera documentație pentru proiectele Kotlin, utilizați Dokka;vă rugăm să consultați Dokka READMEpentru instrucțiuni de configurare. Dokka acceptă proiecte cu limbaj mixt și poate genera ieșiri în mai multe formate, inclusiv JavaDoc standard.
OSGi
Pentru suportul OSGi, consultați pagina Kotlin OSGi.
Utilizarea Gradle Kotlin DSL
Când folosiți Gradle Kotlin DSL, aplicați plugin-urile Kotlin folosind blocul plugins { ... }
. Dacă le aplicați în schimb cu apply { plugin(...) }
, este posibil să întâlniți referințe nerezolvate la extensiile generate de Gradle Kotlin DSL. Pentru a rezolva acest lucru, puteți să comentați utilizările eronate, să rulați sarcina Gradle kotlinDslAccessorsSnapshot
, apoi să decomentați utilizările înapoi și să rulați din nou compilarea sau să reimportați proiectul în IDE.
.