【发布时间】:2014-11-09 23:15:05
【问题描述】:
我正在尝试运行一个使用 protobuf.jar 的 java 程序,但我不断收到此错误。
我已经在 linux 中设置了我的类路径变量:
CLASSPATH=/home/.../src/PlaceServer.class:/home/.../src/protobuf.jar:/home/.../src
export CLASSPATH
但是当我在 jar 中读取后在命令行中运行我的程序时。
java PServer
我明白了:
java.lang.NoClassDefFoundError: com/google/protobuf/MessageOrBuilder
但是,当我运行另一个也读取相同 jar 的程序时,这个名为 BServer 的程序
java BServer
它工作正常,并且按照我的要求正确。我什至尝试在这些命令下运行
java -cp .protobuf.jar PServer
而且它仍然不适用于 PServer。
但是,如果我从命令行在我的 Macbook 上运行相同的程序(也在任一操作系统中的 Eclipse 中),我不会收到此异常,并且一切正常。
感谢您的帮助!
【问题讨论】:
-
该错误表明
PServer使用了protobufs 但Java 没有正确找到protobuf.jar。不过,我在您的类路径规范中没有看到任何明显的问题。您确定您正确指定了protobuf.jar的路径吗?也许BServer工作正常,因为它根本不使用protobufs?也许它可以在 mac 上运行,因为文件位于那里的不同位置,或者因为protobuf.jar已经安装在某个公共位置?需要更多信息才能说。 -
附言。得知现在有教授强迫他们的学生使用我的代码有点疯狂!我希望你不会像我讨厌我在文学课上读的每一本书一样讨厌它! :)
-
我想我明白了,这很奇怪,并且由于某种原因,Java 在不同的机器上读取 CLASSPATH 的方式不同,所以我不得不更明确地识别它。关于 protobuf,真的很酷,在课堂上学习新东西令人耳目一新!
标签: java linux classpath protocol-buffers