首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在java协议缓冲区中导入“google/protobuf/描述符”

在java协议缓冲区中导入“google/protobuf/描述符”
EN

Stack Overflow用户
提问于 2013-11-19 10:42:35
回答 3查看 17.4K关注 0票数 9

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

因此,在我的.proto文件中,我需要:

代码语言:javascript
复制
import "google/protobuf/descriptor.proto";
package ...;

...

由于我的文件没有编译,抱怨依赖关系,所以我得到了一个descriptor.proto文件的副本,将它放在我的proto文件所在的目录中。

这解决了问题,但我不相信这是正确的方法。现在,descriptor.proto与我的.proto文件一起编译,导致在运行时编译了2个descriptor.proto

  • protobuf-java-2.5.0.jar文件一起提供的
  • 与我的.proto文件一起编译的

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

感谢这里最好的练习技巧!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-11-19 21:46:55

当我在.proto中使用描述符时,我使用它的方式如下

代码语言:javascript
复制
import "google/protobuf/descriptor.proto";

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

然后使用默认目录中的addressbookSD.proto生成java (在windows上):

代码语言:javascript
复制
protoc addressbookSD.proto --java_out=./ --proto_path=./ --proto_path=<protobuf-install-directory>\src

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

代码语言:javascript
复制
<protobuf-install-directory>\src\google\protobuf

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

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

代码语言:javascript
复制
<protobuf-install-directory>\src
    +-- google
         +-- protobuf
             +-- descriptor.proto
票数 11
EN

Stack Overflow用户

发布于 2020-08-25 07:44:06

您的原型无法找到系统默认包含文件夹中的文件。

https://github.com/golang/protobuf/issues/694

apt安装原型编译器不会将其放入包含文件夹中。

如果您有类似linux机器中的错误,请使用此方法。

protobuf:文件找不到。 google/protobuf/duration.proto:文件未找到。 google/protobuf/timestamp.proto:文件未找到。

为了在linux系统上正确安装

代码语言:javascript
复制
PROTOC_ZIP=protoc-3.7.1-linux-x86_64.zip
curl -OL https://github.com/protocolbuffers/protobuf/releases/download/v3.7.1/$PROTOC_ZIP
sudo unzip -o $PROTOC_ZIP -d /usr/local bin/protoc
sudo unzip -o $PROTOC_ZIP -d /usr/local 'include/*'
rm -f $PROTOC_ZIP
票数 1
EN

Stack Overflow用户

发布于 2020-04-25 15:09:21

请记住:我最近也遇到了同样的问题,在我的例子中,我的项目依赖于protobuf-lite。显然,protobuf需要自定义扩展的“完整”原型,因此我必须添加依赖项,如下所示:

代码语言:javascript
复制
dependencies {
    protobuf "io.grpc:grpc-protobuf:${grpcVersion}"

    ...
}

请注意,我在项目中依赖于gRPC,但这也适用于com.google.protobuf

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20069295

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档