Проект сервлета Java и проект библиотеки Android в Eclipse - NoClassDefFoundError

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

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

AndroidMonitoring (который зависит от MonitoringModel,

в разделе 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 ответа

Решение

Решено!

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

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

РЕДАКТИРОВАТЬ: очевидно, шаг 3. можно заменить, создав жесткую ссылку из DataServlet/WEB-INF/lib/monitoringmodel.jar to monitormodel.jar - все еще тестирую это, поскольку некоторые последовательности действий разрывают метинки ссылок. Символьные ссылки, похоже, не работают - сообщили об этом как об ошибке

РЕДАКТИРОВАТЬ 2: шаги ниже, кажется, тоже работают - но я оставляю ручную процедуру, поскольку она определенно работает

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

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

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

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

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

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

Другие вопросы по тегам