rpc框架: thrift/avro/protobuf 之maven插件生成java类

thriftavroprobobuf 这几个rpc框架的基本思想都差不多,先定义IDL文件,然后由各自的编译器(或maven插件)生成目标语言的源代码,但是,根据idl生成源代码这件事,如果每次都要手动敲命令,未免太无聊了,幸好这三种框架都提供了对应的maven插件来完成代码的自动生成,本文演示了这三种框架的maven插件用法。

一、maven-thrift-plugin

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <project xmlns="http://maven.apache.org/POM/4.0.0"
 3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 5     <modelVersion>4.0.0</modelVersion>
 6  
 7     <groupId>yjmyzz</groupId>
 8     <artifactId>thrift-contract</artifactId>
 9     <version>1.0</version>
10  
11     <properties>
12         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
13         <compiler-plugin.version>2.3.2</compiler-plugin.version>
14         <thrift.version>0.9.2</thrift.version>
15     </properties>
16  
17     <dependencies>
18         <dependency>
19             <groupId>org.apache.thrift</groupId>
20             <artifactId>libthrift</artifactId>
21             <version>${thrift.version}</version>
22         </dependency>
23     </dependencies>
24  
25     <build>
26         <plugins>
27             <plugin>
28                 <groupId>org.apache.maven.plugins</groupId>
29                 <artifactId>maven-compiler-plugin</artifactId>
30                 <version>${compiler-plugin.version}</version>
31                 <configuration>
32                     <encoding>${project.build.sourceEncoding}</encoding>
33                 </configuration>
34             </plugin>
35             <plugin>
36                 <groupId>org.apache.thrift.tools</groupId>
37                 <artifactId>maven-thrift-plugin</artifactId>
38                 <version>0.1.11</version>
39                 <configuration>
40                     <thriftExecutable>/usr/local/bin/thrift</thriftExecutable>
41                 </configuration>
42                 <executions>
43                     <execution>
44                         <id>thrift-sources</id>
45                         <phase>generate-sources</phase>
46                         <goals>
47                             <goal>compile</goal>
48                         </goals>
49                     </execution>
50                     <execution>
51                         <id>thrift-test-sources</id>
52                         <phase>generate-test-sources</phase>
53                         <goals>
54                             <goal>testCompile</goal>
55                         </goals>
56                     </execution>
57                 </executions>
58             </plugin>
59         </plugins>
60     </build>
61  
62 </project>

.thrift文件约定放在src/main/thrift目录即可,运行mvn package后,会自动在target目录下生成java源码及编译后的class,参考下图:

二、avro-maven-plugin

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <project xmlns="http://maven.apache.org/POM/4.0.0"
 3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 5     <modelVersion>4.0.0</modelVersion>
 6 
 7     <groupId>yjmyzz.avro</groupId>
 8     <artifactId>avro-contract</artifactId>
 9     <version>1.0</version>
10 
11     <properties>
12         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
13         <compiler-plugin.version>2.3.2</compiler-plugin.version>
14         <avro.version>1.7.5</avro.version>
15     </properties>
16     <dependencies>
17         <dependency>
18             <groupId>junit</groupId>
19             <artifactId>junit</artifactId>
20             <version>4.10</version>
21             <scope>test</scope>
22         </dependency>
23         <dependency>
24             <groupId>org.slf4j</groupId>
25             <artifactId>slf4j-simple</artifactId>
26             <version>1.6.4</version>
27             <scope>compile</scope>
28         </dependency>
29         <dependency>
30             <groupId>org.apache.avro</groupId>
31             <artifactId>avro</artifactId>
32             <version>${avro.version}</version>
33         </dependency>
34         <dependency>
35             <groupId>org.apache.avro</groupId>
36             <artifactId>avro-ipc</artifactId>
37             <version>${avro.version}</version>
38         </dependency>
39     </dependencies>
40     <build>
41         <plugins>
42             <plugin>
43                 <groupId>org.apache.maven.plugins</groupId>
44                 <artifactId>maven-compiler-plugin</artifactId>
45                 <version>${compiler-plugin.version}</version>
46             </plugin>
47             <plugin>
48                 <groupId>org.apache.avro</groupId>
49                 <artifactId>avro-maven-plugin</artifactId>
50                 <version>${avro.version}</version>
51                 <executions>
52                     <execution>
53                         <id>schemas</id>
54                         <phase>generate-sources</phase>
55                         <goals>
56                             <goal>schema</goal>
57                             <goal>protocol</goal>
58                             <goal>idl-protocol</goal>
59                         </goals>
60                     </execution>
61                 </executions>
62             </plugin>
63         </plugins>
64     </build>
65 </project>

各种avro的定义文件放在src/main/avro下,其它跟thrift类似,参考下图:

三、protobuf-maven-plugin

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <project xmlns="http://maven.apache.org/POM/4.0.0"
 3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 5     <modelVersion>4.0.0</modelVersion>
 6 
 7     <groupId>yjmyzz.protobuf</groupId>
 8     <artifactId>protobuf-contract</artifactId>
 9     <version>1.0</version>
10 
11 
12     <dependencies>
13         <dependency>
14             <groupId>com.google.protobuf</groupId>
15             <artifactId>protobuf-java</artifactId>
16             <version>3.0.0-beta-1</version>
17         </dependency>
18     </dependencies>
19     <build>
20         <plugins>
21             <plugin>
22                 <groupId>com.github.igor-petruk.protobuf</groupId>
23                 <artifactId>protobuf-maven-plugin</artifactId>
24                 <version>0.6.3</version>
25                 <executions>
26                     <execution>
27                         <goals>
28                             <goal>run</goal>
29                         </goals>
30                     </execution>
31                 </executions>
32                 <configuration>
33                     <protocCommand>/usr/local/bin/protoc</protocCommand>
34                 </configuration>
35             </plugin>
36         </plugins>
37     </build>
38 
39 
40 </project>

定义文件放在/src/main/protobuf下,其它跟前二个插件类似,参考下图:

注:<protocCommand>/usr/local/bin/protoc</protocCommand> 这里的protoc编译器的版本,必须与

<dependency>    <groupId>com.google.protobuf</groupId>    <artifactId>protobuf-java</artifactId>    <version>3.0.0-beta-1</version></dependency>

中的版本号兼容,否则生成java时会提示版本号不一致

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Youngxj

最新Kangle一键安装脚本免费发布PHP5.2-7.0

8616
来自专栏北京马哥教育

原创投稿 | zabbix的理论知识

? 1.zabbix是什么 zabbix是一款基于web页面的、开源的、企业级的,可以分布式部署的监控软件。 2.zabbix的作用 监控windows和Li...

3046
来自专栏叔叔的博客

阿波罗配置中心的体验

这个好用,可以对部分实例进行灰度发布,比如对部分服务器的实例进行测试,观察一段时间没问题,再正式发布,就是体验服。

1324
来自专栏腾讯Bugly的专栏

移动 H5 首屏秒开优化方案探讨

导语 随着移动设备性能不断增强,web 页面的性能体验逐渐变得可以接受,又因为 web 开发模式的诸多好处(跨平台,动态更新,减体积,无限扩展),APP 客户端...

8045
来自专栏JetpropelledSnake

MySQL学习之Can't connect to MySQL server on localhost (10061)

最近升级 了系统,开机后连接MySQL报错,Can't connect to MySQL server on localhost (10061); 估计是升级系...

3856
来自专栏Java成长之路

线程的实现方式

本文主要介绍线程的3种实现方式和java线程的实现方式。线程是比进程更轻量级的调度执行单位,线程的引入,可以把一个进程的资源分配 和执行调度分开,各个进程既可以...

1395
来自专栏快乐八哥

搭建AngualarJS开发环境

1.选择Web浏览器 Chrome和Firefox浏览器 2.选择代码编辑器 Subline Text和Visual Studio Code 3.安装Web...

1996
来自专栏24K纯开源

mac下利用Breakpad的dump文件进行调试

一、前情回顾 最近把公司的一个视频处理程序更新了一个版本,准备提交测试的发现了崩溃的情况。这个程序采用Qt和ffmpeg技术栈开发,主要用于对视频进行渲染拼接处...

6519
来自专栏Java后端技术栈

简要分析ZooKeeper基本原理

最近一直有小伙伴私信我,问一些关于Zookeeper的知识,下边关于的Zookeeper的知识整理了一下,一起学习一下。

703
来自专栏Seebug漏洞平台

DeDeCMS v5.7 密码修改漏洞分析

织梦内容管理系统(DedeCms)以简单、实用、开源而闻名,是国内最知名的PHP开源网站管理系统,也是使用用户最多的PHP类CMS系统,在经历多年的发展,目前的...

4748

扫码关注云+社区

领取腾讯云代金券