服务器和客户端之间的共享Jar文件 - NoClassDefFoundError

时间:2015-04-25 22:34:25

标签: java linux eclipse windows debian

我正在运行一个debian java服务器,它需要发送和接收EventObject和PostObject类型的对象(例如可序列化)。这些文件已放在.jar文件SharedModels.jar中,并在客户端和服务器上使用。

当尝试在debian上编译时,我得到了输出

<!-- ko foreach: answers -->
    <input type="radio" data-bind="checked: selected, checkedValue: 1">
<!-- /ko -->

在Windows安装(Eclipse)上,使用

ServerThread.java:10: error: package Models does not exist
import Models.EventObject;
              ^
ServerThread.java:11: error: package Models does not exist
import Models.PostObject;
              ^
Database.java:100: error: cannot find symbol
                    ArrayList<PostObject> posts = new ArrayList<>();
                              ^

工作正常(包括通过Eclipse的外部Jar)。

我如何让java明白我想在Debian上使用这些类?

我已经将jar的位置添加到/ etc / environment中的classpath。

罐子的结构可能有问题吗?例如它由一个包含两个类的包组成?

提前致意并表示感谢

编辑:编译好,但是当调用该方法时,服务器不再识别该类。这是输出:

 import Models.EventObject;
 import Models.PostObject;

我已经明白这是因为JVM确实在编译时识别了类,但在运行时没有识别出来。或者类路径有问题。实际的.jar的名称是否需要任何命名来填充其中包含的包?我需要做些什么来解决这个问题?

1 个答案:

答案 0 :(得分:1)

没有。罐子是便携式的,它们之间没有区别。如果他们在Windows上工作,他们也应该在linux上工作。

您的错误消息也非常清楚地显示,问题不在于坏jar,而是在类路径中不存在。可能在类路径设置中存在一个小问题,可能是:

  • /etc/environment中的CLASSPATH语法是否有效?在Windows上,它必须用:分隔,而在Linux上则有;
  • 您将jar的目录包含在类路径中,而不是jar的完整路径?
  • /etc/environment仅在登录shell中设置,之后您是否已登录/注销?

无论如何,你可以给你的javac一个-verbose标志,它会显示从哪里开始加载你的罐子。