Kotlin 1.7依赖性解决方案



假设我有这样的gradle mudule结构:module1=>模块2=>gson。Module2在其公共接口的一个方法中将gson公开为返回类型,但从未在module1中使用过。使用提供依赖关系

实现

配置。问题是,考虑到module1是否未在那里使用,我是否应该向它提供gson依赖关系?这有什么标准吗?我之所以这么问,是因为在kotlin 1.6.10中它运行良好,但kotlin 1.7.20似乎破坏了它,在dagger2处理步骤中,我得到了这样的错误:

ComponentProcessingStep无法处理"module1.MyComponent",因为"Gson"无法解决。

这就是gradle中api(而不是实现(依赖项的作用。只需将implementation("gson:...")替换为api("gson:...")

请参阅https://docs.gradle.org/current/userguide/java_library_plugin.html#sec:java_library_separation

那么你应该在什么时候使用api配置呢?API依赖项是指至少包含一种在库二进制接口中公开的类型,通常称为其ABI(应用程序二进制接口(。这包括但不限于:

超类或接口中使用的
  • 类型
  • 公共方法参数中使用的类型,包括泛型参数类型(其中public是编译器可见的东西,即Java世界中的public、protected和package private成员(

后者是您的用例。

至于为什么dagger在1.6中没有抱怨,我不知道,无论如何,它在1.6中也是错误的,你只是幸运地没有被它绊倒。

最新更新