找不到 Dagger 2 的符号 class "Generated"

Cannot find symbol class "Generated" for Dagger 2

我刚开始使用 Dagger 2 进行依赖注入。当我启动 modulescomponents 并尝试构建我的应用程序时,gradle 抛出错误

Error:(4, 24) error: cannot find symbol class Generated

我仔细研究了一下,发现错误出在 classes Dagger 生成的 DI 之一中。缺少的特定 class 是 javax.annotation.Generated 并且抛出错误的行是将 Dagger 生成的 class 注释为 @Generated("dagger.internal.codegen.ComponentProcessor")

的行

This 问题有助于找到解决方案,即通过将行 compile 'org.glassfish:javax.annotation:10.0-b28' 添加到我的 gradle 构建文件来将 javax 包添加为依赖项。这导致构建成功。

我的问题是,为什么没有将其添加为 Dagger 的传递依赖项,或者为什么没有其他人遇到过这个特定问题(我想是的,因为我在这里找不到任何关于这个?

阅读此内容了解更多信息:https://github.com/google/dagger/issues/95

基本上,解决方案是执行您已经完成的操作,包括 glassfish javax 注释库。

TL;DR 使用匕首 >= 2.1

Alex 是对的,但最好添加 JSR250 依赖项而不是 GlassFish

provided 'javax.annotation:jsr250-api:1.0'

或最新的 gradle 插件:

compileOnly 'javax.annotation:jsr250-api:1.0'

今天的正确答案是使用大于2.1的dagger版本(因为@tomrozb提到的fix集成在2.1中)

如果您的 JAVA_HOME 指向 JAVA 版本 9 或 10,就会发生这种情况。将 JAVA_HOME 切换到 Java 8 可以解决问题,您将不需要额外的依赖.

我将我的 JVM 降级到 Java 8,并且 运行 gradle build 在我的 Android 应用程序中成功使用了 Dagger 2。