【问题标题】:Using useBuildCache in gradle and kapt在 gradle 和 kapt 中使用 useBuildCache
【发布时间】:2023-03-17 20:34:01
【问题描述】:

我想使用新的 kotlin gradle 插件功能并缓存我的构建结果,更多信息请阅读this。 提升构建的另一种方法是缓存 kapt 任务,但默认情况下不启用它

因为 Gradle 还没有办法映射输入和输出 注释处理器

我唯一的 kapt 依赖项是 dagger 2,根据您的经验,缓存它是否安全?

【问题讨论】:

    标签: android gradle kotlin android-gradle-plugin dagger-2


    【解决方案1】:

    Kapt 任务的缓存输出被认为不安全的原因是注释处理器包含的任意代码可能不符合确保正确缓存的一项或多项要求:

    • 转换应仅使用任务输入,不应考虑其他任何内容。默认情况下,任务输入包括源、编译类路径、Android 布局、编译器和注释处理器选项和实现以及其他一些内容,但您可以根据需要注册其他输入。

      违反此规则会导致错误的缓存命中,当注释处理器使用的某些输入没有被跟踪,并且这些输入的更改不会反映在 Gradle 计算的缓存键中,从而导致命中运行任务实际上会导致不同的输出。

    • 注释处理器产生的所有输出都应作为任务输出进行跟踪,这些输出默认是生成的 Java 和 Kotlin 源代码以及生成的二进制类。如果某个任务产生了其他任何东西,您可以手动将其注册为构建脚本中的任务输出。

      不遵循此规则会将一些生成的输出留在缓存之外,不会保存它们,因此不会加载它们。

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

      不遵循此规则的注释处理器的缓存输出是徒劳的,因为它通常会导致缓存未命中或错误的缓存命中。

    据我所知,Dagger 2 遵循这些规则,并且缓存其输出应该可以正常工作,但我无法对此提供保证。无论如何,请随意尝试,看看缓存如何在您的构建中发挥作用。

    如果您在使用特定注释处理器时遇到任何问题,应该按照上述规则进行缓存,请向Kotlin issue tracker 报告。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-24
      • 2017-10-22
      • 2019-11-03
      • 2022-10-13
      • 1970-01-01
      • 2019-09-29
      • 2020-04-19
      • 1970-01-01
      相关资源
      最近更新 更多