【发布时间】:2018-01-26 17:21:30
【问题描述】:
我一直在使用 protobuf 生成后端内部消息,但是当我搬到新笔记本电脑并再次设置 protoc 时,它似乎不再生成有效的 java 代码了。
我使用的是最新的 Ubuntu 16.04 并且已经下载了最新的协议
$ protoc --version
libprotoc 3.5.1
构建它,没有错误或警告,使用
protoc --java_out=<javapath> --python_out=<pythonpath> messages.proto
Eclipse/maven 显示的消息如下:
The method parseUnknownFieldProto3(CodedInputStream, UnknownFieldSet.Builder, ExtensionRegistryLite, int) is undefined for the type MessageA.Request Messages.java ...path, line etc...
snip, more of the same for other messages
Messages.Shutdown Messages.java ...path...
The method setUnknownFieldsProto3(UnknownFieldSet) is undefined for the type GeneratedMessageV3.Builder<Messages.Request.Builder> Messages.java ...path, line etc...
snip, more of the same
如果我手动将 parseUnknownFieldProtoc3 重命名为 parseUnknownField 并且对于 SetUnknownFields 相同,错误就会消失,但这感觉像是错误的解决方案。
我错过了什么?
【问题讨论】:
-
您是否使用匹配的 protoc 编译器和库代码版本?含义:库引用/导入:它们也是 3.5.1 吗?
-
我刚刚意识到我们在类路径中的.jar 是3.3.0,我现在觉得很傻。试图找到一个预建的 3.5.1 jar 来测试。
-
另一种选择是使用 v3.3.0 中的
protoc:github.com/google/protobuf/releases/tag/v3.3.0
标签: java protocol-buffers