Rediger side
For at bygge et Kotlin-projekt med Gradle skal du anvende Kotlin Gradle-pluginprogrammet til dit projekt og konfigurere afhængigheder.
- Plugin og versioner
- Targeting multiple platforms
- Targeting af JVM
- Kotlin- og Java-kilder
- Targeting JavaScript
- Kotlin- og Java-kilder
- Targeting Android
- Konfigurering af afhængigheder
- Afhængighedstyper
- Afhængighed af standardbiblioteket
- Sæt afhængigheder på testbiblioteker
- Sæt en afhængighed af et kotlinx-bibliotek
- Sæt afhængigheder på øverste niveau
- Annotationsbehandling
- Inkrementel kompilering
- Understøttelse af Gradle build cache
- Understøttelse af Gradle-konfigurationscache
- Compilerindstillinger
- Attributter fælles for JVM, JS, og JS DCE
- Attributter, der er fælles for JVM og JS
- Attributter specifikke for JVM
- Attributter specifikke for JS
- Generering af dokumentation
- OSGi
- Anvendelse af Gradle Kotlin DSL
Plugin og versioner
Anvend Kotlin Gradle-plugin ved hjælp af Gradle plugins DSL.
Kotlin Gradle-plugin 1.4.30 fungerer med Gradle 5.4 og nyere versioner. kotlin-multiplatform
plugin’et kræver Gradle 6.0 eller nyere.
plugins { id 'org.jetbrains.kotlin.<...>' version '1.4.30'}
plugins { kotlin("<...>") version "1.4.30"}
Placetholderen <...>
skal erstattes med et af de plugin-navne, der kan findes i yderligere afsnit.
Targeting multiple platforms
Projekter, der er rettet mod flere platforme, kaldet multiplatformsprojekter, kræver plugin kotlin-multiplatform
. Få mere at vide om plugin’et.
kotlin-multiplatform
plugin’et fungerer med Gradle 6.0 eller nyere.
plugins { id 'org.jetbrains.kotlin.multiplatform' version '1.4.30'}
plugins { kotlin("multiplatform") version "1.4.30"}
Targeting af JVM
For at målrette JVM’en skal du anvende Kotlin JVM-plugin’et.
plugins { id "org.jetbrains.kotlin.jvm" version "1.4.30"}
plugins { kotlin("jvm") version "1.4.30"}
Den version
skal være bogstavelig i denne blok, og den kan ikke anvendes fra et andet build-script.
Alternativt kan du bruge den ældre apply plugin
-tilgang:
apply plugin: 'kotlin'
Det anbefales ikke, at du anvender Kotlin-plugins med apply
i Gradle Kotlin DSL – se hvorfor.
Kotlin- og Java-kilder
Kotlin-kilder kan gemmes sammen med Java-kilder i samme mappe eller placeres i forskellige mapper. Standardkonventionen er at bruge forskellige mapper:
project - src - main (root) - kotlin - java
Den tilsvarende sourceSets
-egenskab skal opdateres, hvis du ikke bruger standardkonventionen:
sourceSets { main.kotlin.srcDirs += 'src/main/myKotlin' main.java.srcDirs += 'src/main/myJava'}
sourceSets.main { java.srcDirs("src/main/myJava", "src/main/myKotlin")}
Targeting JavaScript
Ved målretning af kun JavaScript skal du bruge kotlin-js
-pluginet. Læs mere
plugins { id 'org.jetbrains.kotlin.js' version '1.4.30'}
plugins { kotlin("js") version "1.4.30"}
Kotlin- og Java-kilder
Dette plugin fungerer kun for Kotlin-filer, så det anbefales, at du opbevarer Kotlin- og Java-filer separat (hvis projektet indeholder Java-filer). Hvis du ikke gemmer dem separat , skal du angive kildemappen i blokken sourceSets
:
kotlin { sourceSets { main.kotlin.srcDirs += 'src/main/myKotlin' }}
kotlin { sourceSets.apply { kotlin.srcDir("src/main/myKotlin") }}
Targeting Android
Det anbefales, at du bruger Android Studio til at oprette Android-applikationer. Lær, hvordan du bruger Android Gradle-plugin.
Konfigurering af afhængigheder
For at tilføje en afhængighed af et bibliotek skal du angive afhængigheden af den krævede type (f.eks. implementation
) i dependencies
-blokken i DSL-sættene for kildesæt.
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") } } }}
Alternativt kan du indstille afhængigheder på topniveau.
Afhængighedstyper
Vælg afhængighedstypen ud fra dine krav.
Type | Beskrivelse | Hvornår skal den bruges |
---|---|---|
api |
Bruges både under kompilering og ved kørselstid og eksporteres til biblioteksforbrugere. | Hvis en type fra en afhængighed bruges i det aktuelle moduls offentlige API, skal du bruge en api afhængighed. |
implementation |
Bruges under kompilering og på køretid for det aktuelle modul, men er ikke eksponeret for kompilering af andre moduler, der er afhængige af det modul, der har `implementation`-afhængigheden. |
Brug til afhængigheder, der er nødvendige for et moduls interne logik. Hvis et modul er et slutpunktsprogram, der ikke er offentliggjort, skal du bruge |
compileOnly |
Bruges til kompilering af det aktuelle modul og er ikke tilgængelig på køretid eller under kompilering af andre moduler. | Bruges til API’er, som har en tredjeparts-implementering tilgængelig på køretid. |
runtimeOnly |
Er tilgængelig på køretid, men er ikke synlig under kompilering af andre moduler. |
Afhængighed af standardbiblioteket
En afhængighed af et standardbibliotek (stdlib
) i hvert kildesæt tilføjes automatisk. Versionen af standardbiblioteket er den samme som versionen af Kotlin Gradle-plugin’et.
For platformsspecifikke kildesæt bruges den tilsvarende platformsspecifikke variant af biblioteket, mens et fælles standardbibliotek tilføjes til resten. Kotlin Gradle-pluginprogrammet vælger det passende JVM-standardbibliotek afhængigt af kotlinOptions.jvmTarget
compilerindstillingen i dit Gradle-byggescript.
Hvis du erklærer en standardbiblioteksafhængighed eksplicit (f.eks. hvis du har brug for en anden version), vil Kotlin Gradle-pluginprogrammet ikke tilsidesætte den eller tilføje et andet standardbibliotek.
Hvis du slet ikke har brug for et standardbibliotek, kan du tilføje opt-out-flaget til gradle.properties
:
kotlin.stdlib.default.dependency=false
Sæt afhængigheder på testbiblioteker
Det kotlin.test
API er tilgængeligt for test af forskellige Kotlin-projekter.
Føj de tilsvarende afhængigheder på testbiblioteker til:
- For
commonTest
skal du tilføjekotlin-test-common
ogkotlin-test-annotations-common
-afhængighederne. - For JVM-mål skal du bruge
kotlin-test-junit
ellerkotlin-test-testng
til den tilsvarende asserter-implementering og annotationstilknytning. - For Kotlin/JS-mål skal du tilføje
kotlin-test-js
som en testafhængighed.
Kotlin/Native-mål kræver ikke yderligere testafhængigheder, og kotlin.test
API-implementeringerne er indbygget.
Du kan bruge en forkortelse for en afhængighed af et Kotlin-modul, f.eks. kotlin(“test”) for “org.jetbrains.kotlin:kotlin-test”.
Sæt en afhængighed af et kotlinx-bibliotek
Hvis du bruger et kotlinx-bibliotek og har brug for en platformsspecifik afhængighed, kan du bruge platformsspecifikke varianter af biblioteker med suffikser som -jvm
eller -js
, f.eks. kotlinx-coroutines-core-jvm
. Du kan også bruge bibliotekets basisartefaktnavn i stedet – kotlinx-coroutines-core
.
kotlin { sourceSets { jvmMain { dependencies { implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.4.2' } } }}
Hvis du bruger et bibliotek til flere platforme og har brug for at være afhængig af den delte kode, skal du kun angive afhængigheden én gang i det delte kildesæt. Brug bibliotekets basisartefaktnavn, f.eks. kotlinx-coroutines-core
eller ktor-client-core
.
kotlin { sourceSets { commonMain { dependencies { implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.4.2' } } }}
Sæt afhængigheder på øverste niveau
Alternativt kan du angive afhængighederne på øverste niveau med konfigurationsnavne efter mønsteret <sourceSetName><DependencyType>
. Dette er nyttigt for nogle indbyggede Gradle-afhængigheder, som gradleApi()
, localGroovy()
eller gradleTestKit()
, som ikke er tilgængelige i DSL’en for afhængighedssæt i kildesættene.
dependencies { commonMainImplementation 'com.example:my-library:1.0'}
dependencies { "commonMainImplementation"("com.example:my-library:1.0")}
Annotationsbehandling
Kotlin understøtter annotationsbehandling via Kotlin-annotationsbehandlingsværktøjet kapt
.
Inkrementel kompilering
Kotlin Gradle-plugin’et understøtter inkrementel kompilering. Inkrementel kompilering sporer ændringer af kildefilerne mellem builds, så kun filer, der er berørt af disse ændringer, vil blive kompileret.
Inkrementel kompilering understøttes for Kotlin/JVM- og Kotlin/JS-projekter og er aktiveret som standard siden Kotlin 1.1.1.1.
Der er flere måder at deaktivere indstillingen på:
- Føj følgende linje til
gradle.properties
ellerlocal.properties
-filen:-
kotlin.incremental=false
for Kotlin/JVM -
kotlin.incremental.js=false
for Kotlin/JS-projekter
-
-
Som kommandolinjeparameter skal du bruge
-Pkotlin.incremental=false
eller-Pkotlin.incremental.js=false
.Bemærk, at parameteren i dette tilfælde skal tilføjes til hvert efterfølgende build, og ethvert build med deaktiveret inkrementel kompilering ugyldiggør inkrementelle caches.
Bemærk, at det første build ikke er inkrementelt under alle omstændigheder.
Understøttelse af Gradle build cache
Kotlin-plugin’et understøtter Gradle build cache, der gemmer build-output til genbrug i fremtidige builds.
For at deaktivere caching for alle Kotlin-opgaver skal du indstille systemegenskabsflaget kotlin.caching.enabled
til false
(kør buildet med argumentet -Dkotlin.caching.enabled=false
).
Hvis du bruger kapt, skal du være opmærksom på, at kapt-annotationsbehandlingsopgaverne ikke caches som standard. Du kan dog aktivere caching for dem manuelt.
Understøttelse af Gradle-konfigurationscache
Konfigurationscachen er tilgængelig i Gradle 6.5 og nyere som en eksperimentel funktion. du kan se på siden for Gradle-udgivelser, om den er blevet forfremmet til stable.
Kotlin-plugin’et understøtter Gradle-konfigurationscache,som fremskynder byggeprocessen ved at genbruge resultaterne fra konfigurationsfasen.
Se Gradle-dokumentationenfor at lære, hvordan du aktiverer konfigurationscachen. Når du aktiverer konfigurationscachefunktionen, vil Kotlin Gradle-pluginprogrammet begynde at bruge den.
Compilerindstillinger
For at angive yderligere kompileringsindstillinger skal du bruge kotlinOptions
-egenskaben for en Kotlin-kompileringsopgave.
Når opgaverne er rettet mod JVM’en, kaldes de compileKotlin
for produktionskode og compileTestKotlin
for testkode. Opgaverne for brugerdefinerede kildesæt kaldes i overensstemmelse med mønsteret compile<Name>Kotlin
.
Navnene på opgaverne i Android Projects indeholder navnene på byggevarianterne og følger mønsteret compile<BuildVariant>Kotlin
, f.eks. compileDebugKotlin
, compileReleaseUnitTestKotlin
.
Når de er rettet mod JavaScript, kaldes opgaverne henholdsvis compileKotlinJs
og compileTestKotlinJs
og compile<Name>KotlinJs
for brugerdefinerede kildesæt.
For at konfigurere en enkelt opgave skal du bruge navnet på den. Eksempler:
compileKotlin { kotlinOptions.suppressWarnings = true}//orcompileKotlin { kotlinOptions { suppressWarnings = true }}
Bemærk, at med Gradle Kotlin DSL skal du hente opgaven fra projektets tasks
først.
Brug typerne Kotlin2JsCompile
og KotlinCompileCommon
for JS-målene og Common-målene, i overensstemmelse hermed.
Det er også muligt at konfigurere alle Kotlin-kompileringsopgaver i projektet:
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach { kotlinOptions { /*...*/ }}
tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile>().configureEach { kotlinOptions { /*...*/ }}
Den komplette liste over indstillinger for Gradle-opgaverne er følgende:
Attributter fælles for JVM, JS, og JS DCE
Navn | Beskrivelse | Mulige værdier | Standardværdi | |
---|---|---|---|---|
allWarningsAsErrors |
Rapportere en fejl, hvis der er nogen advarsler | falsk | ||
suppressWarnings |
Generer ingen advarsler | falsk | ||
verbose |
Aktiver verbose logning output | falsk | ||
freeCompilerArgs |
En liste over yderligere compilerargumenter |
Attributter, der er fælles for JVM og JS
Attributter specifikke for JVM
Navn | Beskrivelse | Mulige værdier | Standardværdi | |
---|---|---|---|---|
javaParameters |
Generer metadata for Java 1.8 reflection on method parameters | false | ||
jdkHome |
Inkluderer et brugerdefineret JDK fra den angivne placering i den classpath i stedet for standard JAVA_HOME | |||
jvmTarget |
Målversion af den genererede JVM-bytecode | “1.6”, “1.8”, “9”, “10”, “11”, “12”, “13”, “14”, “15” | “1.6” | |
noJdk |
Inddrag ikke automatisk Java-køretid i classpath | false | ||
noReflect |
Inddrag ikke automatisk Kotlin-refleksion i classpath | true | ||
noStdlib |
Indlemmer ikke automatisk Kotlin/JVM stdlib og Kotlin reflection i classpath | true | ||
useIR |
Brug IR-backend | false |
Attributter specifikke for JS
Navn | Beskrivelse | Mulige værdier | Formålsværdi | Defaultværdi |
---|---|---|---|---|
friendModulesDisabled |
Disable internal declaration export | false | ||
main |
Deklarere, om main funktionen skal kaldes ved udførelse |
“call”, “noCall” | “call” | |
metaInfo |
Generer .meta.js og .kjsm-filer med metadata. Bruges til at oprette et bibliotek | true | ||
moduleKind |
Den type JS-modul, der genereres af compileren | “umd”, “commonjs”, “amd”, “plain” | “umd” | |
noStdlib |
Don’t automatically include the default Kotlin/JS stdlib into compilation dependencies | true | ||
outputFile |
Destination *.js-fil til kompileringsresultatet | “<buildDir>/js/packages/<project.name>/kotlin/<project.name>.js” | ||
sourceMap |
Generer kildekortet | true | ||
sourceMapEmbedSources |
Indsæt kildefilerne i kildekortet | “never”, “always”, “inlining” | ||
sourceMapPrefix |
Føj det angivne præfiks til stier i kildekortet | |||
target |
Generer JS-filer til en bestemt ECMA-version | “v5” | “v5” | |
typedArrays |
Oversæt primitive arrays til JS-typede arrays | true |
Generering af dokumentation
For at generere dokumentation til Kotlin-projekter, skal du bruge Dokka;se venligst Dokka README for konfigurationsinstruktioner. Dokka understøtter projekter med blandede sprog og kan generere output i flere formater, herunder standard JavaDoc.
OSGi
For OSGi-understøttelse se Kotlin OSGi-siden.
Anvendelse af Gradle Kotlin DSL
Når du bruger Gradle Kotlin DSL, skal du anvende Kotlin-plugins ved hjælp af plugins { ... }
-blokken. Hvis du anvender dem med apply { plugin(...) }
i stedet, kan du støde på uopløste referencer til de udvidelser, der genereres af Gradle Kotlin DSL. For at løse det kan du kommentere de fejlagtige anvendelser ud, køre Gradle-opgaven kotlinDslAccessorsSnapshot
, derefter afkommentere anvendelserne igen og køre buildet igen eller genimportere projektet i IDE’en.