kapt的aptMode用于什么?

问题描述 投票:0回答:1

doc中,aptMode有三个值。

是否有关于这些值的详细信息?

“存根”是什么意思?

kotlin annotation-processing kapt
1个回答
1
投票

请参见https://blog.jetbrains.com/kotlin/2015/06/better-annotation-processing-supporting-stubs-in-kapt/(在第二段中描述了存根,但是第一段提供了上下文):

kapt的初始版本通过拦截注释处理器(例如Dagger 2)和javac之间的通信来工作,并在Javac在源代码中看到的Java类之上添加了已经编译的Kotlin类。这种方法的问题在于,由于必须已经编译Kotlin类,所以它们无法引用处理器生成的任何代码(例如Dagger的模块类)。因此,我们不得不用Java编写Dagger应用程序类。

如前一篇博客文章中所讨论的,可以通过在运行javac之前生成Kotlin类的存根,然后在javac完成之后运行实际编译来解决该问题。存根仅包含声明,而没有方法主体。无论如何,Kotlin编译器曾经在内存中创建此类存根(当Java代码返回Kotlin时,它们用于Java互操作),因此我们要做的就是将它们序列化为磁盘上的文件。

还有this answer

但是现在默认情况下会生成存根,您可以使用aptMode=apt显式禁用此生成,或者only使用aptMode=stubs生成存根。我认为它们主要供构建系统(例如Gradle)在内部使用,如https://www.bountysource.com/issues/38443087-support-for-kapt-for-improved-kotlin-support中所述:

有4个步骤。

  1. kaptGenerateStubsKotlin:使用插件运行kotlinc:org.jetbrains.kotlin.kapt3:aptMode = stubs
  2. kaptKotlin使用plugin:org.jetbrains.kotlin.kapt3:aptMode = apt
  3. 运行kotlinc
  4. compileKotlin定期运行kotlinc
  5. compileJava使用-proc:none运行javac并传递步骤2中生成的源。

这些步骤与每个小版本的Kotlin略有不同,因此这很有趣。

© www.soinside.com 2019 - 2024. All rights reserved.