2011-04-27 88 views
0

我們正在嘗試將robolectric集成到我們的項目中,但運行了 ,出現了一些意想不到的問題。Robolectric NoClassDefFoundError with org.apache packages

當我們不使用Robolectric時,項目編譯得很好。但是,使用Robolectric運行簡單測試時,我們在org.apache.http包 中獲得了NoClassDefFoundError。

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客戶端4.1(因爲我們是依賴於HTTP-MIME 4.1從Apache 庫)。

由於Robolectric jar默認包含httpclient 4.0.3,因此我們無法理解它爲什麼找不到http類。我們假設它有 是與AndroidTranslator試圖修改字節碼(以 與在Dalvik JVM兼容?)

如果有人能在這個問題上提供一些線索,我們將非常感激 。

+0

固定它同樣的問題,你缺少的Robolectic罐子依靠的依賴關係。嘗試下載Robolectric-all.jar或Robolectric-withDependencies.jar – Blundell 2011-12-09 14:16:51

回答

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>