什么是 Kotlin 的 generateStubs
?这是我在 build.gradle
中的配置。
我在这里的公共(public)文档中找不到它:http://kotlinlang.org/docs/reference/kapt.html
kapt {
generateStubs = true
}
如果我的项目中使用了Java
和Kotlin(1.2)
,还需要添加吗?
最佳答案
编辑:
If I'm using Java and Kotlin(1.2) in my project, it is still needed to add
否,在 1.0.4 版本中引入了注解处理 API 的新实验性实现。现在不需要在build.gradle
中配置这个generateStubs
了。
如果您想启用它,请将以下内容添加到您的 build.gradle
:
apply plugin: 'kotlin-kapt'
您还必须从 build.gradle
generateStubs
配置
但是,作为您关于 generateStubs
详细信息的问题,我保留旧帖子的原样。
使用:
使用 kapt
和:generatestubs = true
,以便使用像 dagger 2 或 dbflow 这样的库,这将使编译器能够生成 所需的 stub 类Java 和 Kotlin 之间的互操作性。除非启用 generateStubs = true
,否则“bootstrap
”(一个自定义注解处理器,传递给 javac
,加载注解数据并调用其他注解处理器。) Java 代码需要引用生成的源。拉 from
注意:生成的代码总是在 Java
中,而不是在 Kotlin
中。
生成 stub 需要相对较多的工作,因为必须解析所有声明,有时了解返回类型需要分析表达式(=
符号后的函数体或属性初始化程序)。因此,在 kapt
中使用 stub 会稍微减慢您的构建速度。这就是为什么 stub 默认关闭的原因,要启用它们,您需要在 build.gradle
文件中编写以下内容:
kapt {
generateStubs = true
}
这是如何工作的:
stub ,编译器生成的中间类,允许从 Kotlin 引用“生成的”源,否则编译器将无法引用缺失的源。
生成的源代码是在 "build/generated/source/kapt/main"
中创建的,因为它通常在 "build
"下从 IntelliJ 的项目源中排除,此源根将在构建脚本本身中标记。
sourceSets {
main.java.srcDirs += [file("$buildDir/generated/source/kapt/main")]
}
示例:
Dagger2-example with Kotlin (1.1.50) annotation processor support Gradle build
关于android - Kotlin 中的 generateStubs 配置是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47587126/