android - Dagger 在构建期间“无法访问 SomeComponent”
问题描述
我使用 Dagger 2 开始了一个新项目。模块结构如下(→ 含义取决于 with implement
):
应用 → 数据 → 网络
每个模块都有它自己的 Dagger 组件(例如AppComponent
,DataComponent
和NetworkComponent
)。
@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
吗?这种分离对我们来说非常重要。
解决方案
推荐阅读
- c# - emgucv c# OpenCv:u!=0 错误在 1920*1080p
- php - 可以向 SO 提供 phpinfo() 结果以破坏我的服务器的安全性吗?
- python - 如何使用相同的 Python 代码块处理异常和特定条件
- java - Java 时间转换
- excel - 循环遍历 VBA 中的单元格
- javascript - Wordpress 集成 tinyMCE 的方式是什么?
- wcf - WCF 单一方法不会被调用
- java - 在 Web 浏览器中查看来自 aws s3 的文件内容
- json - 如何使用 Angular 4 在前端显示 json
- sql - 在perl中使用变量dir从sql文件中读取sql语句