【问题标题】:protoc producing invalid java codeprotoc 产生无效的 java 代码
【发布时间】: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 中的 protocgithub.com/google/protobuf/releases/tag/v3.3.0

标签: java protocol-buffers


【解决方案1】:

听起来您正在使用不匹配的生成代码和库代码。如果您使用的是protoc 3.5.1,则需要来自 3.5.1 的库代码;或者,如果您使用的是库 3.3.0 - 您需要来自 3.3.0 的 protoc

所有版本均为here,其中3.5.13.3.0

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-19
  • 2013-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-24
相关资源
最近更新 更多