【发布时间】:2015-04-25 22:34:25
【问题描述】:
我正在运行一个 debian java 服务器,它需要发送和接收 EventObject 和 PostObject 类型的对象(例如可序列化)。这些已放置在 .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 的名称是否需要命名才能确定其中包含的包?我需要做什么来解决这个问题?
【问题讨论】:
-
你如何尝试在 linux 上编译这个?
-
(1) 这正是 Maven 和 Gradle 为您解决的问题。 (2) 包命名使用标准约定——小写,以
com.example开头。 -
编译使用javac文件file file -cp jar1.jar:jar2.jar
标签: java linux eclipse windows debian