為了用 Gradle 構(gòu)建 Kotlin,你應(yīng)該設(shè)置好 kotlin-gradle 插件,將其應(yīng)用到你的項目中,并且添加 kotlin-stdlib 依賴。這些操作也可以在 IntelliJ IDEA 中通過調(diào)用 Project action 中的 Tools | Kotlin | Configure Kotlin 自動執(zhí)行。
使用 kotlin-gradle-plugin 編譯 Kotlin 源代碼和模塊.
要使用的 Kotlin 版本通常定義為 kotlin_version 屬性:
buildscript {
ext.kotlin_version = '<要使用的版本>'
repositories {
mavenCentral()
}
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
當通過 Gradle 插件 DSL 使用 Kotlin Gradle 插件 1.1.1 及以上版本時,這不是必需的。
針對 JVM,需要應(yīng)用 Kotlin 插件:
apply plugin: "kotlin"
或者,從 Kotlin 1.1.1 起,可以使用 Gradle 插件 DSL 來應(yīng)用該插件:
plugins {
id "org.jetbrains.kotlin.jvm" version "<要使用的版本>"
}
在這個塊中的 version 必須是字面值,并且不能從其他構(gòu)建腳本中應(yīng)用。
Kotlin 源代碼可以與同一個文件夾或不同文件夾中的 Java 源代碼混用。默認約定是使用不同的文件夾:
project
- src
- main (root)
- kotlin
- java
如果不使用默認約定,那么應(yīng)該更新相應(yīng)的 sourceSets 屬性
sourceSets {
main.kotlin.srcDirs += 'src/main/myKotlin'
main.java.srcDirs += 'src/main/myJava'
}
當針對 JavaScript 時,須應(yīng)用不同的插件:
apply plugin: "kotlin2js"
這個插件只適用于 Kotlin 文件,因此建議將 Kotlin 和 Java 文件分開(如果是同一項目包含 Java 文件的情況)。與
針對 JVM 一樣,如果不使用默認約定,我們需要使用 sourceSets 來指定源代碼文件夾。
sourceSets {
main.kotlin.srcDirs += 'src/main/myKotlin'
}
除了輸出的 JavaScript 文件,該插件默認會創(chuàng)建一個帶二進制描述符的額外 JS 文件。
如果你是構(gòu)建其他 Kotlin 模塊可以依賴的可重用庫,那么該文件是必需的,并且應(yīng)該與轉(zhuǎn)換結(jié)果一起分發(fā)。
其生成由 kotlinOptions.metaInfo 選項控制:
compileKotlin2Js {
kotlinOptions.metaInfo = true
}
Android 的 Gradle 模型與普通 Gradle 有點不同,所以如果我們要構(gòu)建一個用 Kotlin 編寫的 Android 項目,我們需要
用 kotlin-android 插件取代 kotlin 插件:
buildscript {
ext.kotlin_version = '<要使用的版本>'
……
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
不要忘記配置標準庫依賴關(guān)系。
如果使用 Android Studio,那么需要在 android 下添加以下內(nèi)容:
android {
……
sourceSets {
main.java.srcDirs += 'src/main/kotlin'
}
}
這讓 Android Studio 知道該 kotlin 目錄是源代碼根目錄,所以當項目模型加載到 IDE 中時,它會被正確識別。或者,你可以將 Kotlin 類放在 Java 源代碼目錄中,該目錄通常位于 src/main/java。
除了上面顯示的 kotlin-gradle-plugin 依賴之外,還需要添加 Kotlin 標準庫的依賴:
repositories {
mavenCentral()
}
dependencies {
compile "org.jetbrains.kotlin:kotlin-stdlib"
}
如果針對 JavaScript,請使用 compile "org.jetbrains.kotlin:kotlin-stdlib-js" 替代之。
如果是針對 JDK 7 或 JDK 8,那么可以使用擴展版本的 Kotlin 標準庫,其中包含
為新版 JDK 增加的額外的擴展函數(shù)。使用以下依賴之一來取代 kotlin-stdlib
:
compile "org.jetbrains.kotlin:kotlin-stdlib-jre7"
compile "org.jetbrains.kotlin:kotlin-stdlib-jre8"
如果你的項目中使用 Kotlin 反射或者測試設(shè)施,你也需要添加相應(yīng)的依賴:
compile "org.jetbrains.kotlin:kotlin-reflect"
testCompile "org.jetbrains.kotlin:kotlin-test"
testCompile "org.jetbrains.kotlin:kotlin-test-junit"
從 Kotlin 1.1.2 起,使用 org.jetbrains.kotlin group 的依賴項默認使用
從已應(yīng)用的插件獲得的版本來解析。你可以用完整的依賴關(guān)系符號
(如 compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version")手動提供其版本。
請參見 Kotlin 注解處理工具(kapt)的描述。
Kotlin 支持 Gradle 中可選的增量編譯。
增量編譯跟蹤構(gòu)建之間源文件的改動,因此只有受這些改動影響的文件才會被編譯。
從 Kotlin 1.1.1 起,默認啟用增量編譯。
有幾種方法來覆蓋默認設(shè)置:
將 kotlin.incremental=true 或者 kotlin.incremental=false 行添加到一個 gradle.properties 或者一個 local.properties 文件中;
將 -Pkotlin.incremental=true 或 -Pkotlin.incremental=false 添加到 gradle 命令行參數(shù)。請注意,這樣用法中,該參數(shù)必須添加到后續(xù)每個子構(gòu)建,并且任何具有禁用增量編譯的構(gòu)建將使增量緩存失效。
啟用增量編譯時,應(yīng)該會在構(gòu)建日志中看到以下警告消息:
Using kotlin incremental compilation
請注意,第一次構(gòu)建不會是增量的。
協(xié)程支持是 Kotlin 1.1 中的一個實驗性的功能,所以當你在項目中使用協(xié)程時,Kotlin 編譯器會報告一個警告。
如果要關(guān)閉該警告,可以將以下塊添加到你的 build.gradle 文件中:
kotlin {
experimental {
coroutines 'enable'
}
}
要指定附加的編譯選項,請使用 Kotlin 編譯任務(wù)的 kotlinOptions 屬性。
當針對 JVM 時,對于生產(chǎn)代碼這些任務(wù)稱為 compileKotlin 而對于
測試代碼稱為 compileTestKotlin。對于自定義源文件集(source set)這些任務(wù)稱呼取決于 compile<Name>Kotlin 模式。
當針對 JavaScript 時,這些任務(wù)分別稱為 compileKotlin2Js 與 compileTestKotlin2Js,以及對于自定義源文件集稱為 compile<Name>Kotlin2Js。
示例:
compileKotlin {
kotlinOptions.suppressWarnings = true
}
compileKotlin {
kotlinOptions {
suppressWarnings = true
}
}
對于 Gradle 任務(wù)的完整選項列表如下:
| 名稱 | 描述 | 可能的值 | 默認值 |
|---|---|---|---|
apiVersion |
只允許使用來自捆綁庫的指定版本中的聲明 | “1.0”、 “1.1” | “1.1” |
languageVersion |
提供與指定語言版本源代碼兼容性 | “1.0”、 “1.1” | “1.1” |
suppressWarnings |
不生成警告 | false | |
verbose |
啟用詳細日志輸出 | false | |
freeCompilerArgs |
附加編譯器參數(shù)的列表 | [] |
| 名稱 | 描述 | 可能的值 | 默認值 |
|---|---|---|---|
javaParameters |
為方法參數(shù)生成 Java 1.8 反射的元數(shù)據(jù) | false | |
jdkHome |
要包含到 classpath 中的 JDK 主目錄路徑,如果與默認 JAVA_HOME 不同的話 | ||
jvmTarget |
生成的 JVM 字節(jié)碼的目標版本(1.6 或 1.8),默認為 1.6 | “1.6”、 “1.8” | “1.6” |
noJdk |
不要在 classpath 中包含 Java 運行時 | false | |
noReflect |
不要在 classpath 中包含 Kotlin 反射實現(xiàn) | true | |
noStdlib |
不要在 classpath 中包含 Kotlin 運行時 | true |
| 名稱 | 描述 | 可能的值 | 默認值 |
|---|---|---|---|
main |
是否要調(diào)用 main 函數(shù) | “call”、 “noCall” | “call” |
metaInfo |
使用元數(shù)據(jù)生成 .meta.js 與 .kjsm 文件。用于創(chuàng)建庫 | true | |
moduleKind |
編譯器生成的模塊類型 | “plain”、 “amd”、 “commonjs”、 “umd” | “plain” |
noStdlib |
不使用捆綁的 Kotlin stdlib | true | |
outputFile |
輸出文件路徑 | ||
sourceMap |
生成源代碼映射(source map) | false | |
target |
生成指定 ECMA 版本的 JS 文件 | “v5” | “v5” |
要生成 Kotlin 項目的文檔,請使用 Dokka;
相關(guān)配置說明請參見 Dokka README
。Dokka 支持混合語言項目,并且可以生成多種格式的輸出
,包括標準 JavaDoc。
關(guān)于 OSGi 支持請參見 Kotlin OSGi 頁。
以下示例顯示了配置 Gradle 插件的不同可能性: