NoClassDefFoundError разрабатывает библиотеку с Android-приложением, Maven и Eclipse

Я разрабатываю библиотеку Android ( SiriRestClient ), чьи артефакты управляются через Maven, и я использую Eclipse для разработки. Я собираю артефакты как файл JAR, так как у меня нет никаких активов в проекте, только классы Java, и есть проблемы с упаковкой артефактов в качестве апклибов с Eclipse / Maven / ADT .

Я также разрабатываю приложение для пользовательского интерфейса Android ( SiriRestClientUI ), которое зависит от библиотеки SiriRestClient. Я управляю зависимостью от библиотеки SiriRestClient через Maven.

Оба проекта строятся и развертываются отлично независимо в Eclipse.

ПРОБЛЕМА:

Поскольку я начал управлять зависимостью SiriRestClientUI от библиотеки SiriRestClient через Maven, если у меня одновременно есть проект библиотеки и SiriRestClientUI, который открывается одновременно в Eclipse, я получаю NoClassDefFoundError когда пытаюсь развернуть приложение SiriRestClientUI на устройство.

Например:

 11-01 16:11:52.288: E/AndroidRuntime(9409): java.lang.NoClassDefFoundError: edu.usf.cutr.siri.android.client.config.SiriJacksonConfig 11-01 16:11:52.288: E/AndroidRuntime(9409): at edu.usf.cutr.siri.android.ui.MainActivity.onCreate(MainActivity.java:100) 11-01 16:11:52.288: E/AndroidRuntime(9409): at android.app.Activity.performCreate(Activity.java:4470) 11-01 16:11:52.288: E/AndroidRuntime(9409): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1053) 11-01 16:11:52.288: E/AndroidRuntime(9409): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1934) 11-01 16:11:52.288: E/AndroidRuntime(9409): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1995) 11-01 16:11:52.288: E/AndroidRuntime(9409): at android.app.ActivityThread.access$600(ActivityThread.java:128) 11-01 16:11:52.288: E/AndroidRuntime(9409): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1161) 11-01 16:11:52.288: E/AndroidRuntime(9409): at android.os.Handler.dispatchMessage(Handler.java:99) 11-01 16:11:52.288: E/AndroidRuntime(9409): at android.os.Looper.loop(Looper.java:137) 11-01 16:11:52.288: E/AndroidRuntime(9409): at android.app.ActivityThread.main(ActivityThread.java:4514) 11-01 16:11:52.288: E/AndroidRuntime(9409): at java.lang.reflect.Method.invokeNative(Native Method) 11-01 16:11:52.288: E/AndroidRuntime(9409): at java.lang.reflect.Method.invoke(Method.java:511) 11-01 16:11:52.288: E/AndroidRuntime(9409): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:980) 11-01 16:11:52.288: E/AndroidRuntime(9409): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:747) 11-01 16:11:52.288: E/AndroidRuntime(9409): at dalvik.system.NativeStart.main(Native Method)` 

Это серьезное раздражение во время одновременного процесса разработки библиотеки и приложения, поскольку единственным обходным решением, которое я нашел, является редактирование кода библиотеки, сборка проекта библиотеки, закрытие проекта библиотеки и последующее выполнение приложения SiriRestClientUI.

Я думаю, проблема связана с тем, как Eclipse / Maven обрабатывает зависимости Maven, когда проект библиотеки открыт.

Вот скриншот Eclipse, показывающий проект SiriRestClientUI, когда проект библиотеки (SiriRestClient, над ним) ЗАКРЫТО:

Введите описание изображения здесь

Вы можете увидеть sirirestclient-1.0.0-SNAPSHOT.jar разделе «Maven Dependencies», который вытаскивается из моего локального репозитория Maven, и это то, что я хочу. В этой конфигурации все работает нормально.

Однако, когда я ОТКРЫВАЮ проект библиотеки SiriRestClient, мои записи «Maven Dependencies» меняются, а файл JAR исчезает, и вместо этого отображается папка для проекта:

Введите описание изображения здесь

Если я попытаюсь запустить SiriRestClientUI, когда оба проекта открыты, я получаю NoClassDefFoundError . Таким образом, кажется, что Eclipse перенаправляет сборку проекта, а классы библиотеки не включаются.

ВОПРОС:

Как настроить Eclipse / Maven так, чтобы он всегда полагался на JAR-файл в локальном репозитории Maven вместо того, чтобы переключать зависимость Maven с локальным проектом?

Или, есть ли другой способ избавиться от NoClassDefFoundError с этой конфигурацией?

Файл pom.xml для проекта библиотеки находится здесь .

Файл pom.xml для проекта приложения SiriRestClientUI находится здесь .

Solutions Collecting From Web of "NoClassDefFoundError разрабатывает библиотеку с Android-приложением, Maven и Eclipse"

Попробуйте это: щелкните правой кнопкой мыши по проекту -> Свойства -> Maven -> снимите флажок « Resolve dependencies from Workspace projects .

Вам нужно убедиться, что две вещи: во-первых: у андроидного объекта зависит, должен ли быть apklib узла, например, не забывайте, что узел упаковки

 <modelVersion>4.0.0</modelVersion> <groupId>cn.company.common</groupId> <artifactId>util</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>apklib</packaging> <name>util</name> 

Во-вторых: узлу зависимости проекта проекта android нужно это сделать, и не забывайте о узле типа, не забудьте добавить

 <dependency> <groupId>cn.company.common</groupId> <artifactId>util</artifactId> <version>0.0.1-SNAPSHOT</version> <type>apklib</type> </dependency>