为了用 Gradle 构建 Kotlin,你应该设置好 kotlin-gradle 插件,将其应用到你的项目中,并且添加 kotlin-stdlib 依赖。这些操作也可以在 IntelliJ IDEA 中通过调用 Project action 中的 Tools | Kotlin | Configure Kotlin 自动执行。
使用 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,需要应用 Kotlin 插件:
apply plugin: "kotlin" |
plugins { |
id "org.jetbrains.kotlin.jvm" version "<要使用的版本>" |
} |
在这个块中的 version
必须是字面值,并且不能从其他构建脚本中应用。Kotlin 源代码可以与同一个文件夹或不同文件夹中的 Java 源代码混用。默认约定是使用不同的文件夹:
project |
- src |
- main (root) |
- kotlin |
- java |
sourceSets { |
main.kotlin.srcDirs += 'src/main/myKotlin' |
main.java.srcDirs += 'src/main/myJava' |
} |
apply plugin: "kotlin2js" |
sourceSets { |
main.kotlin.srcDirs += 'src/main/myKotlin' |
} |
kotlinOptions.metaInfo
选项控制:
compileKotlin2Js { |
kotlinOptions.metaInfo = true |
} |
buildscript { |
ext.kotlin_version = '<要使用的版本>' |
…… |
dependencies { |
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" |
} |
} |
apply plugin: 'com.android.application' |
apply plugin: 'kotlin-android' |
不要忘记配置标准库依赖关系。
如果使用 Android Studio,那么需要在 android 下添加以下内容:
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" |
} |
compile "org.jetbrains.kotlin:kotlin-stdlib-js"
替代之。如果是针对 JDK 7 或 JDK 8,那么可以使用扩展版本的 Kotlin 标准库,其中包含为新版 JDK 增加的额外的扩展函数。使用以下依赖之一来取代kotlin-stdlib
:
compile "org.jetbrains.kotlin:kotlin-stdlib-jre7" |
compile "org.jetbrains.kotlin:kotlin-stdlib-jre8" |
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 的依赖项默认使用从已应用的插件获得的版本来解析。你可以用完整的依赖关系符号(如 compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
)手动提供其版本。
请参见Kotlin 注解处理工具(kapt
)的描述。
Kotlin 支持 Gradle 中可选的增量编译。
增量编译跟踪构建之间源文件的改动,因此只有受这些改动影响的文件才会被编译。
从 Kotlin 1.1.1 起,默认启用增量编译。
有几种方法来覆盖默认设置:
将 kotlin.incremental=true
或者 kotlin.incremental=false
行添加到一个 gradle.properties
或者一个 local.properties
文件中;
将 -Pkotlin.incremental=true
或 -Pkotlin.incremental=false
添加到 gradle 命令行参数。请注意,这样用法中,该参数必须添加到后续每个子构建,并且任何具有禁用增量编译的构建将使增量缓存失效。
启用增量编译时,应该会在构建日志中看到以下警告消息:
Using kotlin incremental compilation |
请注意,第一次构建不会是增量的。
协程支持是 Kotlin 1.1 中的一个实验性的功能,所以当你在项目中使用协程时,Kotlin 编译器会报告一个警告。
如果要关闭该警告,可以将以下块添加到你的 build.gradle
文件中:
kotlin { |
experimental { |
coroutines 'enable' |
} |
} |
要指定附加的编译选项,请使用 Kotlin 编译任务的 kotlinOptions
属性。当针对 JVM 时,对于生产代码这些任务称为compileKotlin
而对于测试代码称为compileTestKotlin
。对于自定义源文件集(source set)这些任务称呼取决于compile<Name>Kotlin
模式。
当针对 JavaScript 时,这些任务分别称为compileKotlin2Js
与compileTestKotlin2Js
,以及对于自定义源文件集称为compile<Name>Kotlin2Js
。
示例:
compileKotlin { |
kotlinOptions.suppressWarnings = true |
} |
compileKotlin { |
kotlinOptions { |
suppressWarnings = true |
} |
} |
对于 Gradle 任务的完整选项列表如下:
名称 | 描述 | 可能的值 | 默认值 |
---|---|---|---|
apiVersion
|
只允许使用来自捆绑库的指定版本中的声明 | “1.0”、 “1.1” | “1.1” |
languageVersion
|
提供与指定语言版本源代码兼容性 | “1.0”、 “1.1” | “1.1” |
suppressWarnings
|
不生成警告 | false | |
verbose
|
启用详细日志输出 | false | |
freeCompilerArgs
|
附加编译器参数的列表 | [] |
名称 | 描述 | 可能的值 | 默认值 |
---|---|---|---|
javaParameters
|
为方法参数生成 Java 1.8 反射的元数据 | false | |
jdkHome
|
要包含到 classpath 中的 JDK 主目录路径,如果与默认 JAVA_HOME 不同的话 | ||
jvmTarget
|
生成的 JVM 字节码的目标版本(1.6 或 1.8),默认为 1.6 | “1.6”、 “1.8” | “1.6” |
noJdk
|
不要在 classpath 中包含 Java 运行时 | false | |
noReflect
|
不要在 classpath 中包含 Kotlin 反射实现 | true | |
noStdlib
|
不要在 classpath 中包含 Kotlin 运行时 | true |
名称 | 描述 | 可能的值 | 默认值 |
---|---|---|---|
main
|
是否要调用 main 函数 | “call”、 “noCall” | “call” |
metaInfo
|
使用元数据生成 .meta.js 与 .kjsm 文件。用于创建库 | true | |
moduleKind
|
编译器生成的模块类型 | “plain”、 “amd”、 “commonjs”、 “umd” | “plain” |
noStdlib
|
不使用捆绑的 Kotlin stdlib | true | |
outputFile
|
输出文件路径 | ||
sourceMap
|
生成源代码映射(source map) | false | |
target
|
生成指定 ECMA 版本的 JS 文件 | “v5” | “v5” |
要生成 Kotlin 项目的文档,请使用 Dokka; 相关配置说明请参见 Dokka README 。Dokka 支持混合语言项目,并且可以生成多种格式的输出 ,包括标准 JavaDoc。