eclipse中的java servlet项目和android库项目 - NoClassDefFoundError

时间:2013-08-24 14:08:34

标签: android eclipse noclassdeffounderror android-library

我的工作区中有一些项目:

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

AndroidMonitoring(取决于MonitoringModel,

in the Android section of the project properties

编译并运行得很好但我需要在DataServlet项目中也可以使用MonitoringModel类。我在ModelServlet项目的Java Build路径中添加了Model作为依赖项,但我得到了:

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)

我需要Model作为Android库项目,因为它包含android类 - 但也包含解析servlet中文件的方法 - 是否可能?我该如何设置?

编辑:MonitoringModel为here

2 个答案:

答案 0 :(得分:2)

解决了!

  1. 从DataServlet的java构建路径中删除依赖项
  2. 转到MonitoringModel项目并删除库属性,将其作为Android应用程序运行重新创建到库中(来自here清理MonitoringModel项目
  3. 从bin /抓取monitoringmodel.jar并将其放入DataServlet/WEB-INF/lib
  4. 刷新并在服务器上运行
  5. done
  6. 将尝试改进这个黑客(链接到外部jar似乎没有工作btw) - 任何更好的想法将被接受为答案 - 但现在关闭它。

    编辑:显然第3步可以通过创建从DataServlet/WEB-INF/lib/monitoringmodel.jar到monitoringmodel.jar的硬链接来代替 - 仍然会在某些操作序列中断时对此进行测试这个链接起了作用。符号链接似乎不起作用 - 将其报告为bug

    EDIT2 :以下步骤似乎也有效 - 但我保留手动程序,因为它肯定有效

    1. 从DataServlet的java构建路径中删除依赖项
    2. 将来自bin /的monitoringmodel.jar硬链接到DataServlet/WEB-INF/lib。我使用了shell链接扩展但是:

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

      也应该有用

    3. 现在,每当您在监控模型中进行更改时,jar都会更新。您只需刷新 servlet项目(默认情况下将自行重新部署在服务器上)

    4. 澄清:当然servlet项目不是要使用android.*类 - 这不是我的问题 - 我的问题是将模型代码放在一个地方,这个地方必须是一个android文库

答案 1 :(得分:0)

首先 - 我认为由于许多原因,Java Web Project不能与任何Android特定类一起使用 如果您的MonitoringModel包含要在Android和Web应用程序之间共享的某些Java代码,则可以将其提取到单独的Java项目中,并使用Link Source中的Properties->Build Path选项将其链接到两个项目。 enter image description here