首页 > 解决方案 > Dagger 在构建期间“无法访问 SomeComponent”

问题描述

我使用 Dagger 2 开始了一个新项目。模块结构如下(→ 含义取决于 with implement):

应用 → 数据 → 网络

每个模块都有它自己的 Dagger 组件(例如AppComponentDataComponentNetworkComponent)。

@Component(modules=[...])
interface NetworkComponent

@Component(dependencies=[NetworkComponent::class], modules=[...])
interface DataComponent

@Component(dependencies=[DataComponent::class], modules=[...])
interface AppComponent

此设置背后的想法是该app模块无法访问network但只能知道data. 实际结构更复杂,但这是主要原理。

虽然 Android Studio 对此设置非常满意,但 gradle 不会编译它。

错误是:

> Task :app:kaptReleaseKotlin FAILED
error: cannot access NetworkComponent
  class file for com.somepackage.network.di.NetworkComponent not found

* What went wrong:
Execution failed for task ':app:kaptReleaseKotlin'.
> A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptExecution
   > java.lang.reflect.InvocationTargetException (no error message)

因此,在编译app模块时,它无法解析它无权访问的类,但是在app模块的源代码中没有引用这个类。Dagger 似乎在内部试图访问它。

如果我添加一个依赖应用程序→网络应用程序编译并运行良好。

知道如何解决这个问题同时阻止app访问network吗?这种分离对我们来说非常重要。

标签: androidgradledagger-2

解决方案


推荐阅读