我运行一个需要发送和接收types为EventObject和PostObject的对象的debian java服务器(例如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中的类path中。
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在编译时识别类而不是在运行时期间。或者类path有问题。 实际.jar的名称是否需要有任何命名来包含包含的包? 我需要做什么来解决这个问题?
不,罐子是便携式的,它们之间没有区别。 如果他们在Windows上工作,他们也应该在Linux上工作。
你的错误信息也非常清楚地表明,问题不是坏的jar,而是它不存在于你的类路径中。 在你的类路径设置中可能有一个微不足道的问题,可能是:
/etc/environment
CLASSPATH语法是否有效? 在Windows上,它必须分开:
,而在Linux上有一个;
。 /etc/environment
仅在登录shell中设置,之后是否登录/注销? 无论如何,你可以给你的javac
一个-verbose
标志,它会显示,它试图从哪里加载你的罐子。