im运行的debian java服务器需要发送和接收eventobject和postobject类型的对象(例如serializable)。它们被放在.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中的类路径中。
罐子的结构可能有问题吗?它是由一个包含两个类的包组成的吗?
提前问候和感谢
编辑:使它编译得很好,但是当调用该方法时,服务器不再识别该类。这是输出:
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确实在compiletime识别类,但在运行时不识别。或者类路径有问题。实际.jar的名称是否需要有任何命名来fid包含在其中的包?我需要做什么来解决这个问题?

最佳答案

不。罐子是便携式的,它们之间没有区别。如果他们在windows上工作,他们也应该在linux上工作。
您的错误信息也显示得非常清楚,问题不在于坏的jar,而是它不存在于类路径中。可能在类路径设置中有一个小问题,可能是:
/etc/environment中的类路径语法是否有效?在windows上,它必须用:分隔,而在linux上有一个;
您将jar的目录包含在类路径中,而不是jar的完整路径中?
/etc/environment仅在登录shell中设置,之后是否登录/注销?
不管怎样,你可以给你的javac一个-verbose标志,它会显示,它试图从哪里加载你的jar。

09-26 01:43
查看更多