Проект сервлета Java и проект библиотеки Android в Eclipse - NoClassDefFoundError
У меня есть несколько проектов в моей рабочей области:
AndroidMonitoring # an android application
MonitoringModel # an android library project
DataServlet # servlet project
AndroidMonitoring (который зависит от MonitoringModel,
)
компилируется и работает просто отлично, но мне нужно, чтобы классы 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 ответа
Решено!
- удалите зависимость из пути сборки Java DataServlet
перейти кОчистить проект MonitoringModelMonitoringModel
спроектировать и удалить атрибут библиотеки, запустить его как приложение для Android, преобразовать его в библиотеку ( отсюда)- возьмите monitormodel.jar из bin/ и поместите его в
DataServlet/WEB-INF/lib
- обновить и запустить на сервере
- сделано!
Постараюсь улучшить этот хак (кстати, ссылка на внешний jar-файл не работает) - любые лучшие идеи будут приняты в качестве ответа - однако пока закрываем.
РЕДАКТИРОВАТЬ: очевидно, шаг 3. можно заменить, создав жесткую ссылку из DataServlet/WEB-INF/lib/monitoringmodel.jar
to monitormodel.jar - все еще тестирую это, поскольку некоторые последовательности действий разрывают метинки ссылок. Символьные ссылки, похоже, не работают - сообщили об этом как об ошибке
РЕДАКТИРОВАТЬ 2: шаги ниже, кажется, тоже работают - но я оставляю ручную процедуру, поскольку она определенно работает
- удалите зависимость из пути сборки Java DataServlet
Жесткая ссылка на monitormodel.jar из bin/ и
DataServlet/WEB-INF/lib
, Я использовал расширение ссылки оболочки, но это:mklink /H c:\path\to\WebContent\WEB-INF\lib\monitoringmodel.jar c:\path\to\bin\monitoringmodel.jar
также должен работать
Теперь каждый раз, когда вы вносите изменения в модель мониторинга, фляга обновляется. Вам нужно только обновить проект сервлета (по умолчанию будет перераспределен на сервере)
Пояснение: конечно, проект сервлета не предназначен для использования android.*
классы - это была не моя проблема - моя проблема заключалась в том, чтобы иметь код модели в одном месте, и это место должно было быть библиотекой Android
Прежде всего - я считаю, что Java Web Project не будет работать ни с одним из специфических классов Android по многим причинам.
Если ваша MonitoringModel содержит некоторый Java-код, которым вы хотите поделиться между Android и веб-приложением, вы можете извлечь его в отдельный Java-проект и использовать Link Source
вариант в Properties->Build Path
связать его с обоими проектами.