Dagger 2在Android上,缺少错误信息

13

我在我的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的? - Vucko
是的,这个包中的类是由数据绑定注解处理器生成的。但似乎它没有到达那里,因为 Dagger 注解处理失败了(但不知何故没有显示正确的错误)。 - fnberta
嗯,您可能需要重新查看Dagger2官方“入门”指南,看看您是否错过了任何实现步骤。 - Vucko
只要Dagger开心,一切都运行得很好。问题在于当出现错误时,它不会告诉我具体是什么问题,这让我很难找到错误所在。 - fnberta
@beeezn 我也遇到了完全相同的问题,你找到解决方法了吗?我从来没有看到过任何注释处理器异常,所以我不知道我的Dagger设置出了什么问题。 - Austyn Mahoney
@AustynMahoney 很抱歉回复晚了。不幸的是,我没有找到。我成功找到了导致编译错误的错误,但我仍然无法从Dagger获得适当的错误消息... - fnberta
1个回答

27

Java

javac 默认仅显示100个错误。由于databinding为生成的每个绑定类报告一个错误,您可能超过了此限制。

将以下内容添加到您的应用程序的build.gradle中:

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

Kotlin

您可以通过在build.gradle中添加以下内容,启用kapt时使用相同的javac选项。

kapt {
    javacOptions {
        option("-Xmaxerrs", 500)
    }
}

目前这被忽略了,但将在 Kotlin v1.2.20 中得到修复


7
你真是救命恩人,完美地起到了作用!非常感谢! - fnberta
2
非常好的答案,你绝对是一个救星。 - Derek Eminence Lombela
1
不要忘记将上面给出的代码片段嵌套在你的 build.gradle 的 allprojects { ... } 块中。 - Maurice Gavin
@MauriceGavin 如果这个代码块在应用程序的 build.gradle 中,那么它根本不需要嵌套,而我的指示就是让你把它放在那里。 - Austyn Mahoney
1
只有当我从命令行运行构建命令“./gradlew assembleHoneybeeDebug”时,我的Dagger错误才会显示出来。 - Diederik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接