protobuf3-java使用
Protobuf
·
protobuf3-java使用
一、使用说明
官网说明文档:https://developers.google.cn/protocol-buffers/docs/javatutorial
下载编译工具:https://github.com/protocolbuffers/protobuf/releases/tag/v3.19.1
我用的是win10系统,这里选择的是 protoc-3.19.1-win64.zip
解压缩之后需添加系统环境变量
添加后 cmd 命令行查看 protoc --version
能正确显示版本号即配置成功
二、编译 .proto
文件
- 创建文件 AddressBookProtos.proto
syntax = "proto3";
package protobuf;
option java_multiple_files = true;
option java_package = "com.huawei.lc.protobuf";
option java_outer_classname = "AddressBookProtos";
message Person {
optional string name = 1;
optional int32 id = 2;
optional string email = 3;
enum PhoneType {
MOBILE = 0;
HOME = 1;
WORK = 2;
}
message PhoneNumber {
optional string number = 1;
optional PhoneType type = 2;
}
repeated PhoneNumber phones = 4;
}
message AddressBook {
repeated Person people = 1;
}
- java_package 指定生成的类应该使用的 Java 包名称,如果没有明确指定,它只会匹配package声明给出的包名,但这些名称通常不是合适的 Java 包名(因为它们通常不以域名开头)
- java_outer_classname 选项定义将表示此文件的包装类的类名
- java_multiple_files = true 选项可以生成单独的.java每个生成的类的文件(而不是.java为包装类生成单个文件的遗留行为,使用包装类作为外部类,并将所有其他类嵌套在包装类中)
2.执行命令
protoc -I=$SRC_DIR --java_out=$DST_DIR $SRC_DIR/addressbook.proto
#参数说明
protoc -I=源地址 --java_out=目标地址 源地址/xxx.proto
此处生成时会以 proto 里面注明的java_package为路径完整生成,所以目标地址不必包含java_package及之后的路径,
比如:option java_package = "com.test.protocol";,那么就会生成com/test/protocol/XXX.java
-I:主要用于指定待编译的 .proto 消息定义文件所在的目录,即可能出现的包含文件的路径,该选项可以被同时指定多个。
此处指定的路径不能为空,如果是当前目录,直接使用.,如果是子目录,直接使用子目录相对径,如:foo/bar/baz,
如果要编译的文件指定的文件路径为baz/test.proto,那么应这么写-I=foo/bar,而不要一直写到baz
我这里执行 protoc -I=D:\Data\protobuf --java_out=D:\Data\protobuf\AddressBookProtos D:\Data\protobuf/AddressBookProtos.proto
可以看到生成以下文件:
将文件copy到IDEA相应的目录层级,如下图
更多推荐
所有评论(0)