【问题标题】:Classpath set but java.lang.NoClassDefFoundError com/google/protobuf/MessageOrBuilder error?类路径设置但 java.lang.NoClassDefFoundError com/google/protobuf/MessageOrBuilder 错误?
【发布时间】: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


【解决方案1】:

有几件事要检查以消除此错误:

  • 确认所有必需的 Java 类都包含在应用程序的类路径中。最常见的错误是在开始执行依赖于某些外部库的 Java 应用程序之前没有包含所有必需的类。
  • 应用的类路径正确,但在应用执行前Classpath环境变量被覆盖

当您在 Eclipse 中运行应用程序时,IDE 通过使用项目文件夹中的 .classpath 文件来解决此问题。当您构建应用程序(创建 jar)时,您可能会不小心忽略该类,或更改其位置。

您需要做的是首先打开 jar,并确保有问题的类实际上在 jar 中,在同一路径中。然后,浏览上面的列表。

【讨论】:

  • 我检查了 MessageOrBuilder.class 确实存在于我在我的应用程序中使用的“protobuf.jar”中。所以你是说我应该检查你所说的两个要点中的任何一个?
  • 如果该类应该在该 jar 中,则必须正确重建 jar,使其位于应有的位置。或者,您可以自行编译该类并手动将其添加到 jar 中。我很好奇,你最初是如何建造罐子的?您应该考虑查看Creating a JAR File 上的 Java 教程。
  • 嗯,这是一个课堂项目,所以我使用了教授提供给我们的罐子。我自己没有编译 protobuf.jar 我会尝试这样做。
  • @hfontanez 这是错误的:“另外,条目应该用分号';'分隔,而不是冒号':'。” -- 这仅适用于 Windows。 Nice-kun 似乎在 Unix 上。
  • 我的立场是正确的。感谢肯顿瓦尔达。你是对的。 OP 发布(我忽略了)“我已经在 Linux 中设置了我的类路径变量......”
猜你喜欢
  • 1970-01-01
  • 2013-04-14
  • 1970-01-01
  • 2014-07-13
  • 2012-06-01
  • 2015-01-20
  • 1970-01-01
  • 1970-01-01
  • 2011-12-28
相关资源
最近更新 更多