【发布时间】:2019-09-21 21:45:15
【问题描述】:
我对 Dagger 和我自己生成的代码有疑问。
假设:
- 我需要为 UI 测试生成自己的 dagger 组件
- 我有自己的 Gradle 用于注释处理的模块,它为 dagger 组件提供依赖项。打电话给
GeneratedTestCoreComponent。这个类生成正确 -
GeneratedTestCoreComponent建于\build\generated\source\kapt\debug\... -
GeneratedTestCoreComponent用在匕首组件中,像这样
@Component(modules = [UiTestModule::class],
dependencies = [GeneratedTestCoreComponent::class])
interface TestUiComponent {}
- 我的注释处理器模块已正确添加到 gradle
implementation project(path: ':processor')
kapt(name: 'processor')
问题是。在编译期间我得到以下错误
TestUiComponent.java:6: error: cannot find symbol
@com.dagger.Component(modules = {com.xxx.xxx.UiTestModule.class}, dependencies = {GeneratedTestCoreComponent.class})
symbol: class GeneratedTestCoreComponent
TestUiComponent.java:8: error: [ComponentProcessor:MiscError] com.dagger.internal.codegen.ComponentProcessor was unable to process this interface because not all of its dependencies could be resolved. Check for compilation errors or a circular dependency with generated code.
public abstract interface TestUiComponent
附加信息。
当我将 GeneratedTestCoreComponent 类从构建目录复制到 src(保持相同的包)并禁用我的处理器时,一切正常
【问题讨论】:
-
您是否为此使用范围?
-
您是否尝试过使用 testImplementation 和 kaptTest 将这些依赖项添加到测试变体中
-
@UserOne 我试过
androidTestImplementation和kaptAndroidTest但没有帮助 -
@StavroXhardha 我使用自己的范围,但我认为这不是问题。正如我在附加信息中提到的,当我将此类复制到 src 目录时它可以工作
-
你希望你的测试组件不是本地的,所以我在本地单元测试中遇到了类似的问题,这篇文章帮助了我stackoverflow.com/a/45603080/9884320
标签: android gradle dagger-2 auto-generate kapt