Android 上的 Dagger 2,缺少错误消息

Posted

技术标签:

【中文标题】Android 上的 Dagger 2,缺少错误消息【英文标题】:Dagger 2 on Android, missing error messages 【发布时间】:2016-10-21 02:17:36 【问题描述】:

我在我的 android 项目中使用 Dagger 2,但在调试它时遇到了问题。我知道编译失败是因为我的 dagger 2 设置中的错误(以前有过),但几乎不可能找到它,因为我没有收到正确的错误消息告诉我问题出在哪里。我得到的只是显示注释处理失败的消息。大致如下:

Error:Execution failed for task ':app:compileDebugJavaWithJavac'.
> Compilation failed; see the compiler error output for details.
Error:(14, 28) error: cannot find symbol class BR
Error:(17, 40) error: package com.some.package.databinding does not exist
Error:(17, 51) error: cannot find symbol class DaggerSomeComponent
...

也许这与我也在使用数据绑定这一事实有关!?

我正在使用 Dagger 2.5、Gradle 插件 2.1.2 和 android-apt 1.8。

感谢您的帮助!

【问题讨论】:

它显然没有看到这个包:package com.some.package.databinding does not exist,所以它找不到类。这个包中是否存在这个类,是public吗? 是的,这个包中的类是由数据绑定注释处理器生成的。但它似乎没有到达那里,因为 Dagger 注释处理之前失败(但不知何故没有显示正确的错误)。 嗯,您可能想重新访问 dagger2 官方“入门”指南,看看您是否遗漏了实施的任何步骤。 只要 Dagger 开心,一切都会好起来的。只是当出现问题时,它并没有告诉我这让我很难找出问题所在 @beeezn 我也有同样的问题,你找到解决方案了吗?我从来没有看到任何注释处理器异常,所以我不知道我的 Dagger 设置有什么问题。 【参考方案1】:

Java

javac 默认情况下最多只显示 100 个错误。您可能超过了这个限制,因为数据绑定报告了它生成的每个绑定类的错误。

将此添加到您应用的build.gradle

gradle.projectsEvaluated 
    tasks.withType(JavaCompile) 
        options.compilerArgs << "-Xmaxerrs" << "500"
    


科特林

您可以在使用 kapt 时启用相同的 javac 选项,方法是将以下内容添加到您的 build.gradle。

kapt 
    javacOptions 
        option("-Xmaxerrs", 500)
    

这目前被忽略,但在 Kotlin 中将是 fixed v1.2.20

【讨论】:

您是真正的救星,完美运行!非常感谢! 很好的答案,你绝对是个救命稻草。 不要忘记将上面给出的代码 sn-p 嵌套在 build.gradle 的 allprojects ... 块中。 我的 dagger 错误只有在我从命令行运行构建后才会显示出来:./gradlew assembleHoneybeeDebug

以上是关于Android 上的 Dagger 2,缺少错误消息的主要内容,如果未能解决你的问题,请参考以下文章

Android 仪器测试中的 Dagger 2 注入

Android Build 因工件而失败 - 缺少依赖项

Kotlin dagger 2 Android ViewModel 注入错误

Dagger 2:@Component.Builder 缺少所需模块或组件的设置器:[appi.example.com.dagger.AppModule]`

我收到“循环依赖”Android Dagger Hilt 错误

Android kotlin 使用Dagger2报错 InvocationTargetException 不能生成DaggerXXComponent