我的工作区中有一些项目:
AndroidMonitoring # an android application
MonitoringModel # an android library project
DataServlet # servlet project
AndroidMonitoring(依赖于MonitoringModel,
)
编译和运行都很好,但我需要 MonitoringModel 类在 DataServlet 项目中也可用。我将模型作为依赖项添加到 DataServlet 项目的 Java 构建路径中,但我得到:
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 类 - 但也包含解析 servlet 中文件的方法 - 这可能吗?我应该如何设置它?
编辑:MonitoringModel 是 here
最佳答案
解决了!
- 从 DataServlet 的 java 构建路径中删除依赖项
转到清理 MonitoringModel 项目MonitoringModel
项目并删除库属性,将其作为 Android 应用运行并将其重新制作为库(来自 here)- 从 bin/中获取 monitoringmodel.jar 并将其放入
DataServlet/WEB-INF/lib
- 在服务器上刷新并运行
- done !
将尝试改进这个 hack(顺便说一句,链接到外部 jar 似乎不起作用)- 任何更好的想法都将被接受为答案-但是现在关闭它。
编辑:显然第 3 步可以通过从 DataServlet/WEB-INF/lib/monitoringmodel.jar
创建一个硬链接(hard link) 来代替到 monitoringmodel.jar - 仍在测试这个,因为一些 Action 序列打破了我认为的链接。符号链接(symbolic link)似乎不起作用 - 报告为 bug
EDIT2:下面的步骤似乎也有效 - 但我保留手动过程,因为它确实有效
- 从 DataServlet 的 java 构建路径中删除依赖项
将 monitoringmodel.jar 从 bin/硬链接(hard link)到
DataServlet/WEB-INF/lib
。我使用了 shell 链接扩展,但是这个:mklink /H c:\path\to\WebContent\WEB-INF\lib\monitoringmodel.jar c:\path\to\bin\monitoringmodel.jar
应该也可以
现在,每次您在监控模型中进行更改时,jar 都会更新。您只需刷新 servlet 项目(默认情况下将自行重新部署到服务器上)
澄清:当然,servlet 项目并不打算使用 android.*
类 - 这不是我的问题 - 我的问题是将模型代码放在一个地方和这个地方必须是一个安卓库
关于android - eclipse 中的 java servlet 项目和 android 库项目 - NoClassDefFoundError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18419425/