如何编译指定路径下的所有Protocol Buffers文件?
解决protoc通配符编译所有proto文件的错误
问题原因
protoc 3.x版本本身不支持直接解析*.proto这类通配符,当你直接使用protoc ... *.proto时,如果当前工作目录下没有匹配的proto文件,shell不会展开通配符,会把*.proto当作一个实际的文件名传给protoc,从而触发Could not make proto path relative: .proto: No such file or directory错误。
可行解决方案
方法1:使用shell循环遍历文件
通过for循环逐个处理指定路径下的所有proto文件:
for file in $ABSOLUTE_PATH/*.proto; do protoc --proto_path=$ABSOLUTE_PATH --java_out=$OUT_SRC "$file" done
方法2:使用find命令批量处理
如果需要递归处理子目录下的proto文件,用find命令更高效:
find $ABSOLUTE_PATH -type f -name "*.proto" -exec protoc --proto_path=$ABSOLUTE_PATH --java_out=$OUT_SRC {} +
{} +会把所有匹配的文件一次性传给protoc,避免多次启动进程。
方法3:确保通配符正确展开
如果坚持用通配符形式,需指定完整路径的通配符让shell正确展开文件列表:
protoc --proto_path=$ABSOLUTE_PATH --java_out=$OUT_SRC $ABSOLUTE_PATH/*.proto
注意:如果$ABSOLUTE_PATH下没有任何proto文件,这个命令仍会报错,前两种方法容错性更强。
内容的提问来源于stack exchange,提问作者Peng
相关产品推荐
相关产品推荐

