类路径设置但java.lang.NoClassDefFoundError com / google / protobuf / MessageOrBuilder错误?

时间:2014-11-09 23:15:05

标签: java linux classpath protocol-buffers

我正在尝试运行一个使用protobuf.jar的java程序,但我一直收到这个错误。

我在linux中设置了我的classpath变量,以便:

 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中运行),我没有得到这个例外,一切正常。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

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

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

在Eclipse中运行应用程序时,IDE将使用项目文件夹中的.classpath文件解决此问题。当您构建应用程序(创建jar)时,您可能会意外省略此类,或更改其位置。

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