首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从父目录导入proto不起作用。

从父目录导入proto不起作用。
EN

Stack Overflow用户
提问于 2021-09-07 09:05:57
回答 1查看 207关注 0票数 0

不知道如何做进口在proto,一些帮助很大的赞赏。

文件结构:

    • api
      • item.proto

代码语言:javascript
复制
- item.proto

我试图将proto/item.proto导入到proto/api/item.proto

proto/api/item.proto

代码语言:javascript
复制
syntax = "proto2";
import "item.proto"

service ItemService {

  rpc ListItems(ListItemsRequest) returns (ListItemsResponse);
}

message ListItemsRequest {
  //Empty message
}

message ListItemsResponse {

  option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_schema) = {
    json_schema: {
      required:["items"]
    }
  };

  repeated .item.Item wallets = 1;
}

生成线:

代码语言:javascript
复制
protoc \
    --proto_path=proto/ \
    --proto_path=third_party/grpc-gateway/third_party/googleapis \
    --proto_path=third_party/grpc-gateway \
    --include_source_info \
    --include_imports \
    --descriptor_set_out="$DESCRIPTOR_OUT" \
    --cpp_out="$CPP_OUT" \
    --grpc_out="$CPP_OUT" \
    --plugin=protoc-gen-grpc=`which grpc_cpp_plugin` \
    proto/api/item.proto

吐出错误:

代码语言:javascript
复制
api/item.proto:57:12: ".item.Item" is not defined.
EN

回答 1

Stack Overflow用户

发布于 2021-09-07 11:36:54

我假设您没有向proto/item.proto文件中添加包说明符。见。如果在导入的文件中指定了包,则不应该出现错误:

代码语言:javascript
复制
syntax = "proto2";
package item;

message Item {}

您还不能将包说明符添加到导入的文件中,并将包从消息名(在proto/api/item.proto中)中删除:

代码语言:javascript
复制
message ListItemsResponse {
    repeated .Item wallets = 1;
}

另外,protobuf文档建议您始终导入相对于项目根的文件。我假设这种方法可以帮助保持项目的可管理性,我找不到任何技术上的理由来推荐这个方法。就像这样:

proto/api/item.proto

代码语言:javascript
复制
syntax = "proto2";
package api.item;

import "proto/item.proto";

...

并与

代码语言:javascript
复制
protoc \
    --proto_path=. \
    ... \
    proto/api/item.proto
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69085334

复制
相关文章

相似问题

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