我已经将RoboGuice 3依赖项添加到它编译和运行的gradle构建文件中,但是由于NoClassDefFoundError: AnnotationDatabaseImpl,应用程序崩溃了。一些研究表明,RoboBlender对于生成定义是必要的(我熟悉RoboGuice 2,它不需要RoboBlender),但是当我添加RoboBlender时,项目就不再构建了。
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:21.0.3'
compile 'com.android.support:cardview-v7:21.0.+'
compile 'com.android.support:recyclerview-v7:21.0.+'
compile 'com.koushikdutta.urlimageviewhelper:urlimageviewhelper:1.0.4'
compile 'de.hdodenhof:circleimageview:1.2.1'
compile 'com.getbase:floatingactionbutton:1.4.0'
compile 'de.hdodenhof:circleimageview:1.2.1'
compile 'org.twitter4j:twitter4j-core:4.0.2'
compile files('libs/json-me.jar')
compile files('libs/twitter_api_me-1.9.jar')
compile('ch.acra:acra:4.5.0') {
exclude group: 'org.json'
}
compile 'org.roboguice:roboguice:3.0.1'
provided 'org.roboguice:roboblender:3.0.1'}
生成错误:
Error:Execution failed for task ':app:compileDebugJava'.java.lang.ClassCastException:不能将com.sun.tools.javac.code.Type转换为javax.lang.model.type.DeclaredType l> Gradle的依赖缓存可能损坏(有时会在网络连接超时之后发生)。重新下载依赖项和同步项目(需要网络) Gradle构建进程(守护进程)的状态可能已损坏。停止所有Gradle守护进程可能会解决这个问题。停止Gradle构建过程(需要重新启动) 对于损坏的Gradle进程,您还可以尝试关闭IDE,然后杀死所有Java进程。
是什么导致了这一切,我该如何解决呢?
发布于 2014-12-31 13:42:12
好吧,我找到了一个解决办法,我只是禁用了AnnotationDatabase处理并删除了RoboBlender依赖,这解决了我的问题。我还是想知道为什么我一开始就有这个问题。
发布于 2016-07-28 02:43:43
这种错误可能是由于错误地使用@Inject造成的,如下例所示:
public class Foo {
@Inject
public Foo(Context context, int code) {
//this won't work because of the primitive in the constructor
//and the @Inject annotation are being used together
}
}RoboBlender将无法构造数据库,因为无法将原语转换为声明的类型。
因此,您的错误消息
java.lang.ClassCastException: com.sun.tools.javac.code.Type cannot be cast to javax.lang.model.type.DeclaredType意味着基本(com.sun.tools.javac.code.Type)不能转换为引用类型javax.lang.model.type.DeclaredType。
相反,您需要编写一个提供者:
public class FooProvider implements Provider<Foo> {
Context context;
private static int CODE = 1;
@Inject
public FooProvider(Context context) {
this.context = context;
}
@Override
public Foo get() {
return new Foo(context, CODE);
}
}并将Foo绑定到模块中的该提供程序。
binder.bind(Foo.class).toProvider(FooProvider.class);
并从@Inject的构造函数中删除Foo。
我建议您遍历对象图,并在带有原语的构造函数上查找@Inject注释。如上面所示,删除注释并为它们编写提供程序。RoboBlender将正确构建AnnotationsDatabaseImpl,您的项目将编译。
发布于 2015-09-24 20:36:45
我也有同样的问题,在我的例子中,有一个带有2个构造函数的类:
@Inject
public PaymentSelectionDialog(Context context) {
this.context = context;
}
@Inject
public PaymentSelectionDialog(Context context, PaymentSelectable paymentSelectable) {
this.context = context;
this.paymentSelectable = paymentSelectable;使用第一个构造函数没有问题,但是当我使用第二个构造函数实例化对象时,我就遇到了这个问题。所以问题是Roboguice试图注入一个实现PaymentSelectable接口的对象,但是没有在任何模块中定义这个对象。
也许您使用的构造函数具有一个在任何模块中都没有定义的引用。
希望能帮上忙!
https://stackoverflow.com/questions/27721688
复制相似问题