【问题标题】:Shared jar and noclassdeffound java共享 jar 和 noclassdeffound java
【发布时间】:2015-04-28 08:01:00
【问题描述】:

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

导入模型.EventObject; 导入模型.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 的名称是否需要命名才能确定其中包含的包?我需要做什么来解决这个问题?

【问题讨论】:

    标签: java jar shared-libraries server


    【解决方案1】:

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

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

    【讨论】:

    • 这应该不是问题,因为我自己做了罐子。我很确定它就在那里。尽管如此。会检查。 jar 的结构使得包称为 Models,对象是 Models/PostObject 和 Models/EventObject。这是个问题吗?
    • 罐子是谁做的,与出口与否无关。如果您使用 eclipse,请确保将其导出为“可运行的 jar”。
    • 哦,好吧。会检查
    • 我不需要一个主类来运行可运行的 jar 吗?那主线会做什么?我显然需要在服务器和客户端上使用不同的主类..
    • 撞了?还有其他建议吗?请也看看我之前的问题:) 谢谢
    【解决方案2】:

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

    【讨论】:

    • 静态初始化器会不会有问题?
    • 检查类 Models.PostObject 如果它不存在那么这可能是问题。
    猜你喜欢
    • 2014-10-25
    • 2010-11-06
    • 1970-01-01
    • 2012-01-30
    • 1970-01-01
    • 2018-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多