我刚开始使用Dagger 2
进行依赖注入。当我启动modules
,components
并尝试构建我的应用程序时,gradle
抛出了错误
Error:(4, 24) error: cannot find symbol class Generated
我挖了它,发现错误发生在Dagger
生成的DI
个类中。缺少的特定类是javax.annotation.Generated
,抛出错误的行是将Dagger
生成的类转换为@Generated("dagger.internal.codegen.ComponentProcessor")
This问题通过将行javax
添加到我的gradle构建文件中帮助找到将compile 'org.glassfish:javax.annotation:10.0-b28'
包添加为依赖项的解决方案。这导致了成功的构建。
我的问题是,为什么这不作为Dagger
的传递依赖添加,或者为什么没有其他人遇到这个特定问题(我假设是这样,因为我无法找到任何问题关于这个?
答案 0 :(得分:26)
TL; DR 使用Dagger> = 2.1
Alex是对的,但最好添加JSR250依赖项而不是GlassFish
provided 'javax.annotation:jsr250-api:1.0'
或最新的gradle插件:
compileOnly 'javax.annotation:jsr250-api:1.0'
答案 1 :(得分:13)
阅读本文以获取更多信息:https://github.com/google/dagger/issues/95
基本上,解决方案是做你已经完成的工作,其中包括glassfish javax注释库。
答案 2 :(得分:2)
如果您的JAVA_HOME指向JAVA版本9或10,则会发生这种情况。将JAVA_HOME切换到Java 8可以解决此问题,并且您不需要该额外的依赖项。
答案 3 :(得分:0)
今天正确的答案是使用大于2.1的匕首版本(因为@tomrozb提到的fix已集成在2.1中)
答案 4 :(得分:0)
我将JVM降级为Java 8,并且使用Dagger 2在Android应用程序中成功运行gradle build
。