java 如何在一个命令中编译多个proto文件?

sauutmhj  于 2023-03-21  发布在  Java
关注(0)|答案(7)|浏览(282)

我在一个目录中有两个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文件在一个单一的拍摄在一起。

p3rjfoxz

p3rjfoxz1#

问题是你指定--proto_path作为绝对路径,而你的proto文件作为相对路径。你可以删除--proto_path参数(它默认为当前目录),或者你可以这样做:

protoc --proto_path=C:\shekhar\proto_trial
       --java_out=C:\shekhar\proto_trial\java_op
       C:\shekhar\proto_trial\*.proto
laik7k3q

laik7k3q2#

这里有一个使用find的选项

protoc --js_out=js \
        -Iproto/ \
        $(find proto/google -iname "*.proto")
2skhul33

2skhul333#

Protobuf〉= 3.5的命令

在我看来,Windows上的普通命令只适用于Protobuf〈= 3.4,在较新的版本中,你不能使用通配符 *,但你必须将所有的文件名分开。幸运的是,使用for循环(来自here)仍然很容易,使用相对目录:

for /f %i in ('dir /b proto_trial\*.proto') do protoc proto_trial\%i --java_out=proto_trial\java_op

或者,在here中,如果你已经安装了Git Bash,你也可以尝试使用它,因为它可以正确地扩展通配符,然后像以前一样使用命令:

protoc proto_trial\*.proto --java_out=proto_trial\java_op
nlejzf6q

nlejzf6q4#

从这个链接下载编译器的windows版本https://github.com/google/protobuf/releases/tag/v3.3.0
从下载的应用程序的bin文件夹中启动命令提示符。使用potoc命令生成类。

protoc --proto_path=<Directory name where your proto file is residing> 
           --java_out=<Directory name where you want your output classes to get generated> 
           <absolute path of your protofile with extention>

对多个protofile使用wild字符 *

zte4gxcn

zte4gxcn5#

find . -name“*.proto”|xargs -I {}协议“{}”

wqlqzqxt

wqlqzqxt6#

最简单的方法:

protoc C:\shekhar\proto_trial\*.proto --java_out=C:\shekhar\proto_trial\java_op
eaf3rand

eaf3rand7#

对于mac:

protoc --dart_out=grpc:../lib/client **/*.proto

相关问题