Shared jar and noclassdeffound java



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

导入模型.事件对象; 导入模型.PostObject;工作正常(包括通过Eclipse的外部Jar)。

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

Exception in thread "Thread-0"     java.lang.NoClassDefFoundError: Models/PostObject
at server.Database.getPosts(Database.java:101)
at server.ServerThread.run(ServerThread.java:47)
Caused by: java.lang.ClassNotFoundException:     Models.PostObject
    at     java.net.URLClassLoader$1.run(URLClassLoader.java:372)
at  java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 2 more

我已经理解这是因为JVM确实在编译时识别该类,但在运行时无法识别。或者类路径有问题。实际.jar的名称是否需要任何命名才能对其中包含的包进行命名?我需要做什么来解决这个问题?

如果你的模型/PostObject是来自某个jar的类,那么请确保该类包含在导出的jar/war中(只需使用7zip等工具打开它并手动确认所需的类在那里)。

如何创建一个包含 Eclipse 中的外部库的 jar?

当编译时存在所需的类时,就会抛出这个问题,但在运行时,类被更改或删除,或者类的静态初始化抛出异常。这意味着正在加载的类存在于类路径中,但是该类所需的类之一被编译器删除或加载失败。所以你应该看到依赖于这个类的类

最新更新