检查 kapt 是不是使用增量注释处理

Posted

技术标签:

【中文标题】检查 kapt 是不是使用增量注释处理【英文标题】:Checking if kapt uses incremental annotation processing检查 kapt 是否使用增量注释处理 【发布时间】:2019-10-01 14:26:09 【问题描述】:

在 Kotlin 1.3.30 中添加了对增量注释处理的支持:https://blog.jetbrains.com/kotlin/2019/04/kotlin-1-3-30-released/ 根据文档:

请注意,在当前实现中,使用任何非增量 注释处理器或依赖项的 ABI 的更改(到目前为止, 包括修改内部声明)将导致 给定模块的非增量注释处理。

我有一个带有多个注释处理器的多模块项目。只有其中一些是增量的。至少据我所知,有些模块仅使用增量注释处理器。

我的问题是: 有没有办法检查增量注释处理是否发生?例如。 Gradle中是否有任何特定的控制台日志表明这一点?我想确认实际上使用了增量注释处理。

【问题讨论】:

I have to try this. 【参考方案1】:

我可以通过添加来确定

kapt.verbose=true

在根项目中的gradle.properties 中。 这会导致在控制台中打印以下内容,例如改变公共方法:

Javac options: 
[incremental apt] Changed files: [/Users/me/workspace/my-project/core/common/build/tmp/kapt3/stubs/foo/bar/ChangedClassName.java]
...
[INFO] Need to discovery annotation processors in the AP classpath
[INFO] Annotation processors: toothpick.compiler.factory.FactoryProcessor, toothpick.compiler.memberinjector.MemberInjectorProcessor
[INFO] Processing java sources with annotation processors: /Users/me/workspace/my-project/core/common/build/tmp/kapt3/stubs/foo/bar/ChangedClassName.java
[INFO] Annotation processing complete, errors: 0, warnings: 0
[INFO] Annotation processor stats:
[INFO] IncrementalProcessor: total: 61 ms, init: 1 ms, 3 round(s): 59 ms, 0 ms, 1 ms
[INFO] IncrementalProcessor: total: 1 ms, init: 1 ms, 3 round(s): 0 ms, 0 ms, 0 ms

这是使用增量注释处理的时候。 进行干净构建时,会打印:

Javac options: 
[incremental apt] Changed files: []
...
[INFO] Need to discovery annotation processors in the AP classpath
[INFO] Annotation processors: toothpick.compiler.factory.FactoryProcessor, toothpick.compiler.memberinjector.MemberInjectorProcessor
[INFO] Processing java sources with annotation processors: [ALL THE  FILES IN THE MODULE ARE LISTED HERE]
[INFO] Annotation processing complete, errors: 0, warnings: 0
[INFO] Annotation processor stats:
[INFO] IncrementalProcessor: total: 124 ms, init: 1 ms, 3 round(s): 122 ms, 1 ms, 0 ms
[INFO] IncrementalProcessor: total: 1 ms, init: 0 ms, 3 round(s): 1 ms, 0 ms, 0 ms

Toothpick 是我正在使用的 DI 框架,从 2.x 开始支持增量注释处理。

如果有一个不是增量的注释处理器,这也会打印例如:

[INFO] Incremental KAPT support is disabled. Processors that are not incremental: butterknife.compiler.ButterKnifeProcessor.

【讨论】:

以上是关于检查 kapt 是不是使用增量注释处理的主要内容,如果未能解决你的问题,请参考以下文章

Android DataBinding KAPT 增量支持

使用 kapt 和 gradle 时无法调试注释处理器

Kapt 注释处理 - 如何显示完整的堆栈跟踪

配置 kapt 以处理 lombok 注释

在Kotlin中使用注释处理Android框架 kapt

数据绑定注释处理器 kapt 警告