3

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

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

AndroidMonitoring(取决于 MonitoringModel,

在项目属性的Android部分)

编译并运行得很好,但我需要在 DataServlet 项目中也可以使用 MonitoringModel 类。我在 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 中文件的方法 - 可能吗?我应该如何设置?

编辑:监控模型在这里

4

2 回答 2

2

解决了 !

  1. 从 DataServlet 的 java 构建路径中删除依赖项
  2. 转到MonitoringModel项目并删除 library 属性,将其作为 Android 应用程序运行,将其重新制作为库(从这里清理 MonitoringModel 项目
  3. 从 bin/ 中获取 monitoringmodel.jar 并将其放入DataServlet/WEB-INF/lib
  4. 刷新并在服务器上运行
  5. 完成

Will try and improve on this hack (linking to an external jar did not seem to work btw) - any better ideas will be accepted as an answer - however closing this for now.

EDIT : apparently step 3. can be substituted by creating a hard link from DataServlet/WEB-INF/lib/monitoringmodel.jar to monitoringmodel.jar - still testing this as some action sequences break the link methinks. Symbolic links do not seem to work though - reported this as a bug

EDIT2 : the steps below seem to work too - but I leave the manual procedure as it definitely works

  1. remove the dependency from DataServlet's java build path
  2. Hard link the monitoringmodel.jar from bin/ and to the DataServlet/WEB-INF/lib. I used shell link extension but this :

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

    should also work

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

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

于 2013-09-03T14:16:27.173 回答
0

首先 - 由于许多原因,我相信 Java Web Project 不会与任何 Android 特定类一起使用。
如果您的 MonitoringModel 包含一些您希望在 Android 和 Web 应用程序之间共享的 Java 代码,您可以将其提取到单独的 Java 项目Link Source中,并使用一个选项Properties->Build Path将其链接到两个项目。 在此处输入图像描述

于 2013-08-26T18:43:40.223 回答