You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Java Protobuf官方运行时示例无法运行问题求助

解决Protobuf Java示例运行时的NoClassDefFoundError问题

这个错误的核心原因是Java虚拟机找不到Protobuf核心库的类文件,同时你编译后的AddPerson类也没被加入类路径,两种运行方式都没正确配置classpath导致的。下面给你分步解决:

1. 先确认完成代码编译

首先你需要把protoc生成的.java文件(比如PersonProto.java)和官方示例的AddPerson.java一起编译,编译时必须把Protobuf的jar包加入classpath:

javac -cp protobuf-java-3.5.1.jar AddPerson.java PersonProto.java

执行完后,当前目录会生成对应的.class文件:AddPerson.classPersonProto.class以及Protobuf生成的其他内部类文件。

2. 正确的运行命令

运行时需要同时把当前目录(存放你的编译后类文件)Protobuf的jar包都加入classpath,这样JVM才能找到所有需要的类:

java -cp .:protobuf-java-3.5.1.jar AddPerson data

注意:如果是Windows系统,路径分隔符要用分号;替代冒号:,命令改成:

java -cp .;protobuf-java-3.5.1.jar AddPerson data

为什么之前的命令失败?

  • 第一种方式java AddPerson data:完全没指定Protobuf的jar包,JVM找不到com.google.protobuf.MessageOrBuilder这类核心类,直接触发错误。
  • 第二种方式java -cp protobuf-java-3.5.1.jar AddPerson:只添加了Protobuf的jar包,但没把当前目录(你的AddPerson.class所在位置)加入类路径,JVM找不到你的主类,即便没报主类找不到的错误,核心的Protobuf类依然无法被加载。

额外小提示

如果觉得每次输入长命令麻烦,可以把classpath配置到环境变量里,或者用Maven/Gradle这类构建工具管理依赖,这样编译和运行时会自动处理类路径,省心很多。

内容的提问来源于stack exchange,提问作者Keramat

火山引擎 最新活动