文件不在使用 proto_path 指定的任何路径中

Posted

技术标签:

【中文标题】文件不在使用 proto_path 指定的任何路径中【英文标题】:File does not reside within any path specified using proto_path 【发布时间】:2018-07-11 13:52:25 【问题描述】:

我正在测试从另一个目录导入 .proto 文件。

$GOPATH/src/A/A.proto

syntax = "proto3"; 
package A;
 message SomeMsg 
     string  msg = 2;
     int64   id  = 3;
 

$GOPATH/src/B/B.proto

syntax = "proto3"; 
package B; import "A/A.proto";
 message Msg 
     SomeMsg s = 1;
 

我正在这样做: 在文件夹 A 中:

protoc A.proto --go_out=.

然后在文件夹 B 中:

protoc B.proto --go_out=. --proto_path=$GOPATH/

但是我会得到这个错误:

B.proto:文件不在使用--proto_path(或-I)指定的任何路径中。您必须指定包含此文件的 --proto_path。请注意,proto_path 必须是 .proto 文件名的精确前缀—— protoc 太笨了,无法确定两个路径(例如绝对路径和相对路径)何时相等(这比您想象的要难)。

【问题讨论】:

【参考方案1】:

错误对我来说似乎很清楚,它是说您需要指定 B.proto 所在的确切目录

protoc B.proto --go_out=. --proto_path=$GOPATH/src/B 

或者如果你已经在文件夹 B 中,

protoc B.proto --go_out=.

【讨论】:

“比你想象的要难”----当然他们很有趣!当我自己第一次读到它时,我突然大笑。 @Popmedic BTW 感谢您的回答,今天对我有很大帮助。自从我醒来后,我连续坚持了几个小时。非常感谢。 这很令人困惑,因为措辞很奇怪,使用被动语态,而“encompasses”这个词实际上是指文件本身上方的任何目录。更短更清晰的只是“找不到 B.proto。使用 --proto_path 提供 .proto 文件的路径” @JoshuaKolden true,错误信息目前过于复杂 但是为什么工具不能从当前目录找到原型?【参考方案2】:

protoc B.proto --go_out=. --proto_path=$GOPATH/src/B --progo_path=. 为我工作。

--progo_path=. 也可以帮到你。

【讨论】:

以上是关于文件不在使用 proto_path 指定的任何路径中的主要内容,如果未能解决你的问题,请参考以下文章

将不在我计算机上的图像上传到 Cloudinary

bat系统找不到指定文件怎么办?

全网首发:VS编译的文件不在指定位置,怎么办

在配置文件“e:/HB/my-project/tsconfig.json”中找不到任何输入。指定的 “include“ 路径为“[“**/*“]”,“exclude“ 路径为“[]”。

path与classpath的差别

获取文件路径而不在内存中加载文件?