プロジェクトに robolectric を統合しようとしていますが、予期しない問題が発生しました。
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-client 4.1 を含めています (Apache ライブラリの http-mime 4.1 に依存しているため)。
Robolectric jar にはデフォルトで httpclient 4.0.3 が含まれているため、http クラスが見つからない理由がわかりません。AndroidTranslator がバイトコードを変更しようとしていることに関係していると思われます (dalvik jvm と互換性を持たせるためですか?)
誰かがこの問題に光を当てることができれば、私たちは非常に感謝しています.