共享jar和NoClassDefJava

gopyfrb3  于 2021-07-13  发布在  Java
关注(0)|答案(2)|浏览(199)

我正在运行一个debian java服务器,它需要发送和接收eventobject和postobject类型的对象(例如serializable)。它们被放在.jar文件sharedmodels.jar中,在客户机和服务器中都使用。在windows安装(eclipse)上,使用
导入models.eventobject;导入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的名称是否需要有任何命名来fid其中包含的包?我需要怎么做才能解决这个问题?

ocebsuys

ocebsuys1#

如果您的models/postobject是某个jar中的类,那么请确保该类包含在导出的jar/war中(只需使用7zip之类的工具打开它并手动确认所需的类在那里)。
如何使用eclipse中包含的外部库创建jar?

6vl6ewon

6vl6ewon2#

当在编译时存在所需的类,但在运行时更改或删除这些类,或者类的静态初始化引发异常时,就会引发这种情况。这意味着要加载的类存在于类路径中,但该类所需的某个类被编译器删除或加载失败。因此,您应该看到依赖于该类的类

相关问题