一、使用说明

官网说明文档: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 文件

  1. 创建文件 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相应的目录层级,如下图
在这里插入图片描述

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐