私たちはプロジェクトで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と互換性がある?)
を持っていると仮定します。
あなたがRobolecticジャーが依存する依存関係の欠落を追加したことにより、それを修正し、同じ問題を抱えていました。 Robolectric-all.jarまたはRobolectric-withDependencies.jarをダウンロードしてみてください。 – Blundell