在.proto 文件中使用导入出错

我尝试使用 import 语句将一个名为 test1.proto 的原型文件导入另一个名为 test2.proto 的原型文件

import "com/test/test1.proto";

但是我得到了下面的错误

com/test/test1.proto: File not found.
test2.proto: Import "com/test/test1.proto" was not found or had errors.

我尝试了很多方法来找出导入错误的原因,但是没有找到。那么有没有人可以告诉我正确的方法做原型文件导入的情况下,有什么问题的上述声明?

120206 次浏览

您必须使用 --proto_path命令行标志(又名 -I)来告诉 protoc在哪里查找 .proto文件。如果你没有提供路径,默认情况下它只会搜索工作目录。请参阅 文件(在页面末尾的“生成类”下) ,或者键入 protoc --help

如果您正在使用 IntelliJIDEA,请转到 偏好-> 原型布夫支持并将路径添加到 .proto文件。这将解决错误。

对于运行基于 Bazel 的项目的人员,在 BUILDdeps字段中添加所需的 proto文件,如下所示-

native.proto_library(
name = "test_message"
srcs = "test_message.proto"
deps = "//path/to/proto/you_are/importing:test1"

test1test1.proto文件的目标名称,就像 test_messagetest_message.proto文件的目标名称一样。

只是补充一下,如果你正在构建。NET 和/或者您是 VisualStudio,则可以在。Csproj 文件指定 Proto Root,如下所示:

<Protobuf Include="Protos\ProtoFile.proto" GrpcServices="None" ProtoRoot="Protos\" />

这将清除所有导入和相关错误。

如果你正在使用 IntelliJ:

  1. 单击右侧标题上的 Maven 选项卡。
  2. 单击 ReloadAllMaven 对象,它将由一个圆形符号表示。

比方说,在类 Unix 的环境中,原型文件的路径是 /home/path/to/the/protos/dir 原型文件有包和导入声明如下:

package protos.dir;
import "protos/dir/sample.proto";


...

现在转到 proto 包的父目录,并执行 proto 编译命令,例如:

$ cd /home/path/to/the
$ protoc --proto_path=/home/path/to/the --python_out=. /home/path/to/the/protos/dir/*.proto