【问题标题】:What is generateStubs configuration in Kotlin?Kotlin 中的 generateStubs 配置是什么?
【发布时间】:2018-05-15 04:32:30
【问题描述】:

对于 Kotlin,generateStubs 是什么?这是我在build.gradle 中的配置。

我在这里的公共文档中找不到它:http://kotlinlang.org/docs/reference/kapt.html

kapt {
  generateStubs = true
}

如果我在我的项目中使用JavaKotlin(1.2),还需要添加吗?

【问题讨论】:

标签: android kotlin build.gradle


【解决方案1】:

编辑

如果我在我的项目中使用 Java 和 Kotlin(1.2),仍然需要 添加

,在 1.0.4 版本中引入了注解处理 API 的新实验性实现。现在不用在build.gradle中配置这个generateStubs了。

如果您想启用它,请将以下内容添加到您的build.gradle

apply plugin: 'kotlin-kapt' 

您还必须从 build.gradle 中删除 generateStubs 配置

但作为您关于 generateStubs 上的详细信息的问题,我保留旧帖子的原样。



使用:

kaptgeneratestubs = true 一起使用,以便使用dagger 2 或dbflow 等库,这将使编译器能够生成Java 和Kotlin 之间的互操作性 所需的存根类。除非启用generateStubs = true,否则“bootstrap”(自定义注解处理器,传递给javac,加载注解数据并调用其他注解处理器。)Java 代码需要引用生成的sources.pulled那个from

注意:生成的代码总是在Java,而不是Kotlin


When to Include:

生成存根需要相对较多的工作,因为必须解析所有声明,并且有时了解返回类型需要分析表达式(= 符号后的函数体或属性初始化程序)。因此,在kapt 中使用存根会稍微减慢您的构建速度。这就是为什么存根默认关闭的原因,要启用它们,您需要在 build.gradle 文件中编写以下内容:

kapt {
  generateStubs = true
}

这是如何工作的:

存根,编译器生成的中间类,允许从 Kotlin 引用“生成的”源,否则编译器将无法引用缺失的源。

生成的源代码在"build/generated/source/kapt/main" 中创建,因为它位于“build”下,通常从 IntelliJ 的项目源代码中排除,此源代码根将在构建脚本本身中标记。 p>

sourceSets {
  main.java.srcDirs += [file("$buildDir/generated/source/kapt/main")]
}

示例:

Dagger2-example with Kotlin (1.1.50) annotation processor support Gradle build

【讨论】:

  • @kimkevin,一个公开的 kotlin 网站正在概述新功能(至少不像其他博客那样深入)一个指向 when to include 的链接有更多关于注释的详细信息用 kotlin 处理。 是的,您可以在项目中使用带有默认存根的 dagge2,但这会强制使用 Java 编写 Dagger Application 类。
  • @kimkevin ,从此 除非启用 generateStubs = true ,否则“bootstrap”(传递给 javac 的自定义注释处理器加载注释数据并调用其他注释处理器。)Java需要代码来引用生成的源代码我试图展示初始版本限制。
  • @kimkevin,希望我的回答能解决这个问题。 Stubs, compiler generated intermediate classes, allows "generated" sources to be referenced from Kotlin otherwise the compiler will not be able to reference the missing sources.
  • 您引用了一篇两年前的博文。从那时起,这种行为发生了变化,使您的回答非常具有误导性。另外,不要忘记引用所有来源。例如,您使用了来自here 的定义,而没有给予作者任何荣誉。
  • 自 kapt3 以来,存在注释处理器(构建脚本中的 kapt 依赖项)时会自动生成存根。您不需要将generateStubs = true 作为配置的一部分,因为使用了kotlin-kapt 插件,因为kotlin 1.1 This answers 为您提供了对行为差异的看法......我把这个写出来作为我的答案- 我建议将此信息添加到您的答案中,因为它有助于避免人们在阅读本文时产生混淆。不必逐字逐句。
猜你喜欢
  • 2021-12-27
  • 2021-12-25
  • 2023-02-02
  • 1970-01-01
  • 2020-05-30
  • 2020-01-11
  • 1970-01-01
  • 2020-07-12
  • 2018-02-03
相关资源
最近更新 更多