我在一个目录中有两个proto文件,我正在寻找一种方法来在一个命令中从这些文件中生成类。似乎这可以通过--proto_path
参数来完成。根据文档:
您必须提供一个或多个.proto文件作为输入。可以一次指定多个.proto文件。尽管文件是相对于当前目录命名的,但每个文件必须驻留在IMPORT_PATH之一[由--proto_path参数指定]中,以便编译器可以确定其规范名称。
C:\shekhar\proto_trial>dir
Volume in drive C is C
Directory of C:\shekhar\proto_trial
07/25/2014 12:16 PM <DIR> .
07/25/2014 12:16 PM <DIR> ..
07/25/2014 12:16 PM <DIR> java_op
07/25/2014 12:16 PM 230 map.proto
07/23/2014 04:24 PM 161 message.proto
07/25/2014 12:17 PM 1,228 response.proto
3 File(s) 1,619 bytes
3 Dir(s) 50,259,398,656 bytes free
我使用--proto_path
参数,如下所示
C:\shekhar\proto_trial>protoc
--proto_path=C:\shekhar\proto_trial
--java_out=C:\shekhar\proto_trial\java_op
*.proto
但我得到以下错误
message.proto: File does not reside within any path specified using --proto_path (or -I).
You must specify a --proto_path which encompasses this file.
Note that the proto_path must be an exact prefix of the .proto file names -- protoc is unable to figure out when two paths (e.g. absolute and relative) are equivalent (it's harder than you think).
请建议一些方法来编译所有的proto文件在一个单一的拍摄在一起。
7条答案
按热度按时间p3rjfoxz1#
问题是你指定
--proto_path
作为绝对路径,而你的proto文件作为相对路径。你可以删除--proto_path
参数(它默认为当前目录),或者你可以这样做:laik7k3q2#
这里有一个使用find的选项
2skhul333#
Protobuf〉= 3.5的命令
在我看来,Windows上的普通命令只适用于Protobuf〈= 3.4,在较新的版本中,你不能使用通配符 *,但你必须将所有的文件名分开。幸运的是,使用for循环(来自here)仍然很容易,使用相对目录:
或者,在here中,如果你已经安装了Git Bash,你也可以尝试使用它,因为它可以正确地扩展通配符,然后像以前一样使用命令:
nlejzf6q4#
从这个链接下载编译器的windows版本https://github.com/google/protobuf/releases/tag/v3.3.0
从下载的应用程序的bin文件夹中启动命令提示符。使用potoc命令生成类。
对多个protofile使用wild字符 *
zte4gxcn5#
find . -name“*.proto”|xargs -I {}协议“{}”
wqlqzqxt6#
最简单的方法:
eaf3rand7#
对于mac: