gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:52:31 25 4
gpt4 key购买 nike

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

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

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<>();
^

在windows安装(Eclipse)上,使用

 import Models.EventObject;
import Models.PostObject;

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

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

我已将 jar 的位置添加到/etc/environment 中的类路径中。

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 的名称是否需要任何命名来确定其中包含的包?我需要做什么来解决这个问题?

最佳答案

没有。 jar 是可移植的,它们之间没有区别。如果他们在 Windows 上工作,那么他们也应该在 Linux 上工作。

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

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

无论如何,你可以给你的 javac 一个 -verbose 标志,它将显示它试图从哪里加载你的 jar。

关于java - 服务器和客户端之间的共享 Jar 文件 -- NoClassDefFoundError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29871490/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com