能否在命令行向protoc传递Java包名及外部类名选项?
通过protoc命令行指定Java包名和外部类名(无需修改.proto文件)
完全可以通过protoc的命令行参数指定java_package和java_outer_classname,不用修改供应商提供的原始.proto文件,具体用法如下:
- 指定Java包名:使用
--java_opt=package=<目标包名>参数 - 指定外部类名:使用
--java_opt=outer_classname=<目标类名>参数
示例命令
假设你要处理的proto文件是person.proto,希望生成的Java代码包名为com.example.protobuf,外部类名为PersonProto,输出目录为./generated,完整命令如下:
protoc --java_out=./generated person.proto --java_opt=package=com.example.protobuf --java_opt=outer_classname=PersonProto
也可以把多个java_opt参数合并成一个,用逗号分隔:
protoc --java_out=./generated person.proto --java_opt=package=com.example.protobuf,outer_classname=PersonProto
这样生成的Java代码效果和在.proto文件中直接设置对应选项完全一致,后续供应商更新.proto文件时,你直接用新文件重新执行命令即可,无需做任何修改。
内容的提问来源于stack exchange,提问作者Guntram Blohm
相关产品推荐
相关产品推荐

