1

我正在尝试将 proto defn 从父 proto 导入具有以下文件夹结构的子 proto。

|
|--parent.proto
|
|--sub
    |--child.proto

父.proto

message Attribute {
  ---
}

child.proto

import "parent.proto"

    message Child {
      int32 attributeNo = 1;
      com.model.Attribute attribute = 2;

    }

目前它给我一个错误,说它找不到 parent.proto。请建议。

4

1 回答 1

2

protoc在使用-I标志指定的目录中查找其导入。例如,您可以添加-I/home/user/my_awesome_proto_libprotoc命令行参数,编译器会在那里查找您的导入。

从 protoc 的帮助页面,关于--proto_path

  -IPATH, --proto_path=PATH   Specify the directory in which to search for
                              imports.  May be specified multiple times;
                              directories will be searched in order.  If not
                              given, the current working directory is used.

所以目前,当你运行protoc它时,它会parent.protosub目录中查找。这显然不是你需要的。您可以将导入更改为import "../parent.proto"将返回到根级别并parent.proto从那里抓取。但 protobuf 中普遍鼓励的风格是不使用相对导入。

相反,您可以考虑将 proto 项目的根目录添加为-I/--proto_path标志。

另一种选择是从项目的根目录编译您的原型文件。您可以cd到项目的根目录并protoc从那里。

于 2018-11-03T04:33:25.257 回答