Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准,目前已经正在使用的有超过 48,162 种报文格式定义和超过 12,183 个 .proto 文件。他们用于 RPC 系统和持续数据存储系统。
Protocol Buffers 是一种序列化数据结构的方法。对于通过管线(pipeline)或存储数据进行通信的程序开发上是很有用的。这个方法包含一个接口描述语言,描述一些数据结构,并提供程序工具根据这些描述产生代码,用于将这些数据结构产生或解析数据流。
proto2 提供一个程序产生器,支持C++、Java和Python,第三方类库支持JavaScript;而到了proto3,支持C++、Java (包含JavaNano)、Python、Go、Ruby、Objective-C和C#,并且从 3.0.0 Beta 2 版开始支持JavaScript,第三方类库支持Perl、PHP、Scala和Julia。
我们可以在 Maven 中配置相关插件,然后直接在 IDEA 编译 proto 文件。我们的 iteblog.proto 文件如下:
option java_package = "com.iteblog.data.coprocessor.generated"; option java_outer_classname = "IteblogProtos"; option java_generic_services = true; option java_generate_equals_and_hash = true; option optimize_for = SPEED; message CountRequest { } message CountResponse { required int64 count = 1 [default = 0]; } service RowCountService { rpc getRowCount(CountRequest) returns (CountResponse); rpc getKeyValueCount(CountRequest) returns (CountResponse); }
我们在 pom.xml 文件里面加入如下插件:
<build> <plugins> <plugin> <groupId>org.xolstice.maven.plugins</groupId> <artifactId>protobuf-maven-plugin</artifactId> <version>0.6.1</version> <configuration> <protocExecutable>/usr/local/bin/protoc</protocExecutable> </configuration> <executions> <execution> <goals> <goal>compile</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
注意看上面配置的 <protocExecutable>/usr/local/bin/protoc</protocExecutable>
,其中 /usr/local/bin/protoc
是我们 protoc 安装目录,具体如何安装可以参见 《在CentOS下编译安装Protobuf类库》 文件介绍,MAC 平台安装和里面介绍一致。我们在 maven 里面运行 protobuf 插件会调用这个命令,所以需要实现安装好。当 Maven 下载完这个插件之后,你可以在 idea 的 Maven 面板里面看到如下的插件,注意看 protobuf 插件,如下:
我们把上面的 iteblog.proto
文件放到 maven 工程的 src/main/proto/
目录下,如下:
./ +- pom.xml +- src/ +- main/ +- proto/ +- iteblog.proto +- test/ +- proto/ +- test_iteblog.proto
然后我们双击上图中的的 protobuf:compile
选项,这时候 maven 开始为我们将 iteblog.proto
文件编译成 java 类:
[INFO] Scanning for projects... [INFO] [INFO] -------------------------< com.iteblog:hbase >-------------------------- [INFO] Building iteblog 1.0-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- protobuf-maven-plugin:0.6.1:compile (default-cli) @ hbase --- [INFO] Compiling 2 proto file(s) to /Users/iteblog/Desktop/iteblog/target/generated-sources/protobuf/java [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 8.591 s [INFO] Finished at: 2019-02-01T22:32:00+08:00 [INFO] ------------------------------------------------------------------------ Process finished with exit code 0
从上面的输出可以看出,放到当前工程的 target/generated-sources/protobuf/java
目录下面,其中生成的 com.iteblog.data.coprocessor.generated.IteblogProtos.java
就是我们上面定义的。当然,我们还可以通过这个插件生成 cpp、c#、js 以及 python 的文件,这里就不介绍了。
如果你不想用 maven 来编译,你也可以直接使用 protoc 命令来编译:
protoc --java_out=/Users/iteblog/ iteblog.proto
上面命令会在 /Users/iteblog/
目录下面生成我们要的 java 类。如果你是 windows,你也可以使用 protoc.exe 来编译,使用和 protoc 一样,这里就不介绍了。
关于 protobuf-maven-plugin 插件的更多用法可以参见其官网 https://www.xolstice.org/protobuf-maven-plugin/usage.html,这里就不再介绍了。
本博客文章除特别声明,全部都是原创!原创文章版权归过往记忆大数据(过往记忆)所有,未经许可不得转载。
本文链接: 【在 IDEA 中使用 Maven 编译 proto 文件】(https://www.iteblog.com/archives/2509.html)