0

Мы пытаемся интегрировать robolectric в наш проект, но запустили в некоторые неожиданные проблемы.Robolectric NoClassDefFoundError с пакетами org.apache

Проект компилируется отлично, когда мы не используем Robolectric. Тем не менее, мы получаем NoClassDefFoundError в пакетах org.apache.http при запуске простых тестов с 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-клиент 4.1 (потому что мы зависим от HTTP-мим 4.1 из библиотеки Apache ).

Поскольку 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> 
Смежные вопросы