2011-04-27 10 views
0

私たちはプロジェクトでrobolectricを統合しようとしていますが、予期しない問題に を実行しました。Robolectric NoClassDefFoundError with org.apacheパッケージ

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を使用していて、(私たちは、Apache ライブラリーからのhttp-MIME 4.1に依存しているので)私たちは、http-クライアント4.1が含まれています。

デフォルトでRobolectric jarにはhttpclient 4.0.3が含まれているため、 はhttpクラスが見つからない理由を理解できません。私たちは、それは誰かがこの問題についていくつかの光を当てることができれば、我々は非常に 感謝されるAndroidTranslatorは、バイトコードを変更しようとして行うに 何か( へのDalvikのJVMと互換性がある?)

を持っていると仮定します。

+0

あなたがRobolecticジャーが依存する依存関係の欠落を追加したことにより、それを修正し、同じ問題を抱えていました。 Robolectric-all.jarまたはRobolectric-withDependencies.jarをダウンロードしてみてください。 – Blundell

答えて

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>