当前位置: 首页 > 面试题库 >

在Java协议缓冲区中导入“ google / protobuf / descriptor.proto”

贺轶
2023-03-14
问题内容

我有一个.proto文件定义,需要导入,"google/protobuf/descriptor.proto"因为我使用“
自定义选项”。

因此,在我的.proto文件中,我这样做:

import "google/protobuf/descriptor.proto";
package ...;

...

由于我的文件没有编译有关该依赖项的抱怨,因此我得到了描述符文件的副本,将其放置在与我的原型文件相同的目录中。

这解决了问题,但我不认为这是正确的方法。现在,将descriptor.protogets与我的.proto文件一起编译descriptor.proto,从而在运行时进行了2次编译:

  • protobuf-java-2.5.0.jar文件附带的那个
  • 与我的.proto文件一起编译的那个

我认为--proto-path应该以某种方式使用该选项,但不能完全确定什么是正确的方法。

感谢您的最佳做法提示!


问题答案:

当我在.proto中使用描述符时,我像

import "google/protobuf/descriptor.proto";

message AddressBook {
  required google.protobuf.FileDescriptorSet proto_files = 1;

然后使用默认目录下的addressbookSD.proto生成Java(在Windows上):

protoc addressbookSD.proto --java_out=./ --proto_path=./ --proto_path=<protobuf-install-directory>\src

其中,< protobuf-install-directory >是协议缓冲区安装目录。关键是描述符.proto在

<protobuf-install-directory>\src\google\protobuf

protobuf导入策略中的级别必须与文件系统中的目录匹配,就像在Java中一样。

因此,我使用< protobuf-install-directory > \ src作为导入目录,目录结构必须为

<protobuf-install-directory>\src
    +-- google
         +-- protobuf
             +-- descriptor.proto


 类似资料:
  • 在阅读这个相当长的问题之前,我提出了一个bughttps://github.com/GoogleCloudPlatform/python-docs-samples/issues/1103. 原型包和名称解析的留档状态 您可以使用其他定义。通过导入原始文件。导入另一个。在proto的定义中,您可以在文件的顶部添加一条import语句。 我的依赖于annotations.proto将HTTP/JSON

  • 问题内容: 我正在使用gSoap将旧式C 系统重构为SOA。我们遇到了一些性能问题(非常大的XML),因此我的领导要我看一下协议缓冲区。我做到了,它看起来非常酷(我们需要C 和Java支持)。但是协议缓冲区是仅用于序列化的解决方案,现在我需要将其发送到Java前端。从C ++和Java角度来看,我应该使用什么来通过HTTP(只是内部网络)发送那些序列化的内容? PS。另一个人试图加速我们的gSoa

  • 我试图在Windows上的Qt中使用google协议缓冲区。因此,我使用MingGW的msys从github编译了protobuf源代码。proto编译器(protoc)似乎工作得很好,但遗憾的是,它无法使用生成的。博士和。pb。从Qt环境中抄送文件。 将此添加到我的。pro文件: 但我仍然得到“未定义的引用…”当我试图编译这个类时,它使用了所有的方法。 代码必须正确,因为它在使用protoc和Q

  • 试图使用Ionic 4中的协议缓冲区进行编码 我已经下载了协议并用它来生成一堆_pb.js文件,每个. proto文件一个。很好。 首先关注原型示例。这是示例代码: 我做了一些更改以匹配我的文件。更改proto文件的名称。但是我的proto文件中没有包名称。所以我只是使用了消息名称。首先这是我的. proto文件的开头: 下面是我修改后的代码: 这似乎不起作用。我的控制台显示: 我相信我已经成功地

  • 根据示例代码https://developers.google.com/protocol-buffers/docs/cpptutorial,它们展示了如何解析二进制格式的原始文件。使用 我尝试删除文本格式的输入文件的,但在读取文件时仍然失败。我需要做什么才能读取文本格式的原始文件?

  • 其中需要将路径设置为协议,以获取导入标准协议缓冲区(protobuf),如清空。proto和时间戳。在Windows和Dart中的proto? 运行协议时: protoc——dart\u out=grpc:lib/src/protos/generated-Iprotos-protos/organization。proto—plugin=protoc gen dart=D:\Users\Samuel