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