rpc框架: thrift/avro/protobuf 之maven插件生成java类
时间:2022-04-22
本文章向大家介绍rpc框架: thrift/avro/protobuf 之maven插件生成java类,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
thrift、avro、probobuf 这几个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时会提示版本号不一致
- 【Python】30行代码教你将微信变成智能回复机器人
- 【python爬虫】知乎互联网话题问答内容可视化分析
- “mysqlbinlog”工具做binlog server靠谱吗?
- 看各路神仙如何大战MySQL insecure warning报警有感
- 由optimizer_switch所引起的诡异问题
- 【Oracle 12c Flex Cluster专题 】— Leaf Node的故障迁移
- MySQL中的统计信息相关参数介绍
- iOS学习——UITableViewCell两种重用方法的区别
- iOS学习——UIPickerView的实现年月选择器
- iOS学习——自动定位
- iOS学习——iOS原生实现二维码扫描
- iOS学习——iOS开发小知识点集合
- iOS学习——@class和#import的区别
- iOS学习——UIView的研究
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释