共享jar和noclassdeffound java

时间:2015-04-28 08:01:00

标签: java jar shared-libraries server

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

import Models.EventObject;  import Models.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的名称是否需要任何命名来填充其中包含的包?我需要做些什么来解决这个问题?

2 个答案:

答案 0 :(得分:1)

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

How to create a jar with external libraries included in Eclipse?

答案 1 :(得分:0)

当在编译时存在所需的类时,抛出此异常,但在运行时更改或删除类,或者类的静态初始化抛出异常。这意味着正在加载的类存在于类路径中,但是此类所需的类之一被删除或无法由编译器加载。因此,您应该看到依赖于此类的类