Kotlin的generateStubs
是什么?这是build.gradle
中的配置。
我在公共文档中找不到它:http://kotlinlang.org/docs/reference/kapt.html
kapt {
generateStubs = true
}
如果我在项目中使用Java
和Kotlin(1.2)
,仍然需要添加?
答案 0 :(得分:19)
修改强>:
如果我在我的项目中使用Java和Kotlin(1.2),仍然需要它 添加
否,版本 1.0.4 引入了注释处理API的新实验性实现。现在无需在generateStubs
中配置此build.gradle
。
如果要启用它,请将以下内容添加到build.gradle
:
apply plugin: 'kotlin-kapt'
您还必须从generateStubs
build.gradle
配置
但是关于generateStubs
的详细信息,我保留了原来的帖子。
使用:
将kapt
与generatestubs = true
一起使用,以便使用dagger 2或dbflow等库,这将使编译器能够生成 Java和Kotlin之间的互操作性所需的存根类。除非启用generateStubs = true
,否则" bootstrap
" (自定义注释处理器,传递给javac
,加载注释数据并调用其他注释处理器。)需要Java代码来引用生成的source.pulled from
注意:生成的代码始终位于Java
,但不在Kotlin
。
生成存根需要相对多的工作,因为必须解决所有声明,有时知道返回类型需要分析表达式(函数体或=
符号后的属性初始值设定项)。因此,使用kapt
中的存根会减慢您的构建速度。这就是默认关闭存根的原因,为了启用它们,您需要在build.gradle
文件中编写以下内容:
kapt {
generateStubs = true
}
这是如何运作的:
Stubs,编译器生成的中间类,允许"生成"要从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