在gradle和kapt中使用useBuildCache

7
我想使用新的Kotlin Gradle插件功能和缓存我的构建结果,了解更多信息请阅读这篇文章。另一种提高构建速度的方法是缓存kapt任务,但默认情况下未启用。

因为Gradle尚未有一种方法来映射注解处理器的输入和输出

我唯一依赖的kapt依赖项是dagger 2,根据您的经验,是否可以安全地将其缓存?
1个回答

3
Kapt任务缓存输出不安全的原因在于注解处理器包含任意代码,可能不符合确保正确缓存的一个或多个要求。
  • 转换过程应该仅使用任务输入,并且不应考虑其他任何因素。默认情况下,任务输入包括源代码、编译类路径、Android布局、编译器和注解处理器选项及实现等一些其他内容,但您可以根据需要注册额外的输入。

    违反此规则会导致假缓存命中,当注解处理器使用的某些输入未被跟踪为此类时,这些输入的更改不会反映在Gradle计算的缓存键中,从而导致在运行任务时出现命中,实际上会产生不同的输出。

  • 由注解处理器生成的所有输出都应该被跟踪为任务输出,默认情况下是生成的Java和Kotlin源代码以及生成的二进制类。如果任务生成了其他任何东西,您可以在构建脚本中手动将其注册为任务输出。

    不遵循此规则将使一些生成的输出不在缓存范围内,无法保存和加载。

  • 注解处理器应该是纯净的,也就是说,给定相同的输入,它应该产生相同的输出。它不应该显示随机行为或使用系统时间。

    对于不遵循此规则的注解处理器缓存输出是徒劳的,因为它经常会导致缓存未命中或假缓存命中。

据我所知,Dagger 2 遵循这些规则,并且缓存其输出应该可以正常工作,但我不能保证。无论如何,请随意尝试并查看缓存对您的构建的影响。
如果您在使用特定注释处理器时遇到任何问题,根据上述规则,它应该与缓存兼容,请将其报告给Kotlin问题跟踪器

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接