проект Java servlet и проект библиотеки android в eclipse-NoClassDefFoundError


У меня есть несколько проектов в моем рабочем пространстве:

AndroidMonitoring # an android application
MonitoringModel # an android library project
DataServlet # servlet project

Андроидмониторинг (который зависит от модели мониторинга,

в разделе свойств проекта для Android)

Компилируется и работает просто отлично, но мне нужно, чтобы классы MonitoringModel были доступны также в проекте DataServlet. Я добавил модель как зависимость в путь сборки Java проекта DataServlet, но я получаю:

java.lang.NoClassDefFoundError: gr/uoa/di/monitoring/model/Battery
    gr.uoa.di.monitoring.server.servlets.DataCollectionServlet.doGet(DataCollectionServlet.java:20)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

Мне нужно, чтобы модель была проектом библиотеки Android, поскольку она содержит классы android , но также содержит методы для разбирать файлы в сервлете-это возможно ? Как мне это устроить ?

Редактировать : MonitoringModel является здесь

2 3

2 ответа:

Решено !

  1. удалите зависимость из пути сборки Java DataServlet
  2. перейдите в проект MonitoringModel и удалите атрибут библиотеки, запустите его как приложение для Android, переделайте его в библиотеку (из здесь) очистите проект MonitoringModel
  3. Возьмите модель мониторинга.банку из бункера/ и бросьте ее в DataServlet/WEB-INF/lib
  4. обновить и запустить на сервере
  5. сделано !

Попытается улучшить этот хак (ссылка на внешняя банка, похоже, не работает кстати) - любые лучшие идеи будут приняты в качестве ответа-однако закрывая это на данный момент.

EDIT : очевидно, Шаг 3. можно заменить, создав жесткую ссылку из DataServlet/WEB-INF/lib/monitoringmodel.jar в monitoringmodel.jar-все еще тестирует это, поскольку некоторые последовательности действий разрывают связь methinks. Хотя символические ссылки, похоже, не работают - сообщили об этом как об ошибке

EDIT2 : шаги ниже, кажется, тоже работают - но я оставляю руководство процедура как она определенно работает

  1. удалите зависимость из пути сборки Java DataServlet
  2. Жесткая ссылка на модель мониторинга.баночки из-bin/ и к DataServlet/WEB-INF/lib. Я использовал расширение shell link, но это:

    mklink /H c:\path\to\WebContent\WEB-INF\lib\monitoringmodel.jar c:\path\to\bin\monitoringmodel.jar
    

    Должно также работать

  3. Теперь каждый раз, когда вы вносите изменения в модель мониторинга, jar обновляется. Вам нужно только обновить проект сервлета (будет передислоцирован на сервер самостоятельно с помощью по умолчанию)

уточнение: конечно, проект сервлета не предназначен для использования классов android.* - это не моя проблема - моя проблема заключалась в том, чтобы иметь код модели в одном месте, и это место должно было быть библиотекой android

Прежде всего-я считаю, что Java Web Project не будет работать ни с одним из конкретных классов Android по многим причинам.
Если ваш MonitoringModel содержит некоторый код Java, который вы хотите разделить между Android и веб-приложением, вы можете извлечь его в отдельный проект Java и использовать опцию Link Source в Properties->Build Path, чтобы связать его с обоими проектами. Введите описание изображения здесь