0

我有一个生成 DataMapper 类的自制库。

它们是通过注释生成的,@Singleton以便@Inject能够将它们注入我需要的地方。

但它不起作用的地方是当 Dagger 尝试创建依赖关系树时,此错误显示:

:data:kaptGenerateStubsDebugKotlin
e: /Users/me/myproject/data/build/tmp/kapt3/stubs/debug/com/myproject/data/di/DataComponent.java:11: error: [Dagger/MissingBinding] error.NonExistentClass cannot be provided without an @Inject constructor or an @Provides-annotated method.
public abstract com.myproject.domain.repository.ContentRepository contentRepository();
                                                                      ^
  error.NonExistentClass is injected at
      com.myproject.data.repository.ContentDataRepository.<init>(…, myGeneratedDataMapper, …)
  com.myproject.data.repository.ContentDataRepository is injected at
      com.myproject.data.di.module.DataModule.contentRepository(contentDataRepository)
  com.myproject.domain.repository.ContentRepository is provided at
      com.myproject.data.di.DataComponent.contentRepository()
:data:kaptDebugKotlin
:data:kaptDebugKotlin FAILED

涉及的课程有:

DataModule(匕首模块)

@Module
class DataModule {
    @Provides
    @Singleton
    fun contentRepository(contentDataRepository: ContentDataRepository): ContentRepository = contentDataRepository
}

DataComponent(匕首的组件):

@Singleton
@Component(modules = [DataModule::class])
interface DataComponent {
    fun contentRepository(): ContentRepository
}

内容数据存储库

@Singleton
class ContentDataRepository @Inject constructor(
        private val myGeneratedDataMapper: MyGeneratedDataMapper
) : ContentRepository {
    ...
}

MyGeneratedDataMapper

@Singleton
class MyGeneratedDataMapper @Inject constructor() {
   ...
}

问题是,如果我禁用 dagger 依赖项的 kapt gradle.build,然后构建,然后启用它,然后构建,它就可以工作。

如果我做一个干净的+构建,它不起作用,同样的错误。我想让它连续工作。

4

2 回答 2

0

我不知道您是否正在使用带有 androidX 工件的 AS3.2 或 AS3.3,但也许您也是这种情况。

所以当我迁移到androidX artifactsAS3.2 时,我遇到了一堆NonExistentClass错误,以结束构建

kaptGenerateStubsDebugKotlin 
:data:kaptDebugKotlin
:data:kaptDebugKotlin 

我终于发现它与 Dagger 本身有关,并将版本降级2.172.16现在最新版本的 Dagger22.18由于这个错误/功能[他们忘记了],我无法使用。

更新:

我找到了解决方案,它今天才出现所以这里是问题跟踪链接: https ://issuetracker.google.com/issues/115738511

所以该错误不在 Dagger 中,但在 Jetifier 中,我完全忽略了它在迁移期间设置为启用的事实

这是我从链接复制的解决方案:

抱歉,jetifier beta01 与 alpha10 二进制不兼容。

我们已经发布了 beta02,应该可以解决这个问题。

请试试:

buildscript {    dependencies {
       classpath 'com.android.tools.build.jetifier:jetifier-processor:1.0.0-beta02'    } }
于 2018-10-24T06:12:53.757 回答
-1

你可能不会喜欢我的回答,但顺序有点随机。查看此线程以获得更多解释,也许还有更多指导,但是,如果您想验证您是否正在运行,请先查看 Gradle 插件以及如何使用它们

于 2018-10-22T07:46:10.497 回答