【问题标题】:Android Dagger2 ComponentProcessor was unable to processAndroid Dagger2 ComponentProcessor 无法处理
【发布时间】:2022-01-07 10:49:04
【问题描述】:

我正在尝试使用Dagger2 制作多模块项目。你可以看到我的代码following the link。在main 分支中,所有匕首类都在presentation 模块中的工作解决方案。

现在我正在尝试为 DI 根创建单独的 app 模块。你可以看到最新的尝试in the develop branch。它不工作。我想在app 模块中创建我的根ApplicationComponent 组件,并从其他模块中添加PresentationComponent(子)组件。每次我尝试某事时,最终都会得到以下结果:

dagger.internal.codegen.ComponentProcessor 无法处理“ru.ircover.schultetables.app.ApplicationComponent”,因为并非所有依赖项都可以解决。使用生成的代码检查编译错误或循环依赖

这很奇怪,因为与main 分支相比,我没有更改任何依赖项。唯一改变了 - 从根组件ApplicationComponent 到子PresentationComponent 的新链接。据我了解,没有办法将循环依赖显示为app 模块,其内容在presentation 模块中不可见。我已经按照我在 google 中遇到的所有教程进行了操作,但没有一个有帮助。

我已经尝试过的:

  1. 添加到子组件的根组件getter。
  2. 添加到子组件的根组件BuilderFactory
  3. 使用subcomponent 链接添加到根组件特殊模块。
  4. 将子组件的inject 方法移至父组件。

现在我被困住了。似乎问题出在组件或模块连接的某个地方,但我无法找到它发生的位置和方式。我在这里需要帮助。

【问题讨论】:

  • 通常对 StackOverflow 的期望是发布一个最小的可重现示例(问题中的所有代码,而不是指向存储库的链接)和完整的错误消息。你能减少你的例子并仍然重现吗?您确定没有像您的 ComponentProcessor 错误消息所暗示的其他错误消息吗?如果没有这些,这个问题将更像是一个猜谜游戏,而不是一个可解决的问题。
  • @JeffBowman 我希望我有更多的错误消息,但我没有。我发现的所有问题 - dagger repo 中的问题,他们想在其中开发错误消息。但据我所知,这还没有完成。

标签: android kotlin dagger-2


【解决方案1】:

我已经设法通过这些更改构建了您的项目:

  1. 左侧是演示文稿,右侧是应用程序,如您所见,我已删除 dagger-android,并将 moxy deps 作为 API(因为您的应用程序是主模块,它必须查看所有deps 来构建图表),或者您可以将 moxy deps 添加到 app
  2. 之后,不会有任何匕首警告,但您需要修复一些文件才能完成构建。顺便说一句,将某些东西传递给模块的构造函数是一种不好且已弃用的做法。正如您在 PresentationModule 中看到的,我删除了构造函数并删除了提供上下文。我将 Context 绑定移动到 ApplicationComponent - 这是一个很好的地方。
  3. 我还从 PresentationComponent.Factory.create 中删除了构造函数参数

【讨论】:

  • 伙计,你救了我的宠物项目)非常感谢。尤其是最佳实践技巧。
  • 你能另外分享你的调试方法吗?
  • @Ircover “调试它”是什么意思?
  • 您是如何得出在哪里寻找原因的结论的?我永远不会认为这个问题是因为我以某种不正确的方式添加了 moxy 库。
  • @Ircover 在这个具体的案例中我是知道的,因为我过去也遇到过一些类似的问题,所以我试图检查它。是的,有时匕首警告不会告诉您有关错误的任何信息,只有当您知道自己在做什么时,您才能最终找到错误。
【解决方案2】:

您需要添加 dagger.android 支持库,因为您的 moxy.MvpAppCompatFragment 是 built on Android Support Fragments。将此添加到您的演示文稿 gradle 文件中:

implementation "com.google.dagger:dagger-android:$dagger_version"
implementation "com.google.dagger:dagger-android-support:$dagger_version"

来自您的开发分支的presentation/build.gradle

implementation "com.google.dagger:dagger:$dagger_version"
kapt "com.google.dagger:dagger-compiler:$dagger_version"
kapt "com.google.dagger:dagger-android-processor:$dagger_version"

来自Gradle setup

如果您在 dagger.android 中使用类,您还需要包括:

implementation 'com.google.dagger:dagger-android:2.x'
implementation 'com.google.dagger:dagger-android-support:2.x' // if you use the support libraries
annotationProcessor 'com.google.dagger:dagger-android-processor:2.x'

【讨论】:

  • 添加到 apppresentation gradle 文件 - 没有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-17
  • 2017-05-07
相关资源
最近更新 更多