带有org.apache包的Robolectric NoClassDefFoundError

时间:2011-04-27 07:37:51

标签: android apache httpclient noclassdeffounderror robolectric

我们正在尝试将robolectric集成到我们的项目中,但已经运行了 陷入一些意外的问题。

当我们不使用Robolectric时,项目编译得很好。然而, 我们在org.apache.http包中得到NoClassDefFoundError 使用Robolectric进行简单测试时。

Exception in thread "Thread-1" java.lang.NoClassDefFoundError: org/ 
apache/http/HttpRequest 
        at java.lang.ClassLoader.defineClass1(Native Method) 
        at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632) 
        at java.lang.ClassLoader.defineClass(ClassLoader.java:616) 
        at java.lang.ClassLoader.defineClass(ClassLoader.java:466) 
        at javassist.Loader.findClass(Loader.java:379) 
        at 
com.xtremelabs.robolectric.bytecode.RobolectricClassLoader.findClass(Robole ctricClassLoader.java: 
60) 
        at javassist.Loader.loadClass(Loader.java:311) 
        at java.lang.ClassLoader.loadClass(ClassLoader.java:248) 
        at 
com.xtremelabs.robolectric.bytecode.RobolectricClassLoader.loadClass(Robole ctricClassLoader.java: 
37) 
        at se.hsr.android.Info.updateInfoFromWebService(Info.java:57) 
        at se.hsr.android.Info$2.run(Info.java:99) 
Caused by: java.lang.ClassNotFoundException: caught an exception while 
obtaining a class file for org.apache.http.HttpRequest 
        at javassist.Loader.findClass(Loader.java:359) 
        at 
com.xtremelabs.robolectric.bytecode.RobolectricClassLoader.findClass(Robole ctricClassLoader.java: 
60) 
        at javassist.Loader.loadClass(Loader.java:311) 
        at java.lang.ClassLoader.loadClass(ClassLoader.java:248) 
        at 
com.xtremelabs.robolectric.bytecode.RobolectricClassLoader.loadClass(Robole ctricClassLoader.java: 
37) 
        ... 11 more 
Caused by: java.lang.IllegalStateException: shouldn't be modifying 
bytecode after we've started writing cache! 
class=org.apache.http.HttpRequest 
        at 
com.xtremelabs.robolectric.bytecode.AndroidTranslator.onLoad(AndroidTransla tor.java: 
68) 
        at javassist.Loader.findClass(Loader.java:340) 
        ... 15 more 

我们正在使用maven来构建我们的项目,我们已经包含了http-client 4.1(因为我们依赖于来自apache的http-mime 4.1 图书馆)。

由于Robolectric jar默认包含httpclient 4.0.3我们 无法理解为什么它找不到http类。我们假设它有 与AndroidTranslator试图修改字节码(to 与dalvik jvm兼容?)

如果有人能够对这件事情有所了解,我们会非常感激 荷。

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,我通过添加以下排除

来修复它
    <dependency>
        <groupId>com.pivotallabs</groupId>
        <artifactId>robolectric</artifactId>
        <version>1.0-RC1</version>
        <exclusions>
            <exclusion>
                <groupId>org.apache.httpcomponents</groupId>
                <artifactId>httpclient</artifactId>
            </exclusion>
        </exclusions>
        <scope>test</scope>
    </dependency>