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

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

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>
View Code

.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>
View Code

各种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>
View Code

定义文件放在/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时会提示版本号不一致

目录
相关文章
|
5月前
|
安全 前端开发 Java
《深入理解Spring》:现代Java开发的核心框架
Spring自2003年诞生以来,已成为Java企业级开发的基石,凭借IoC、AOP、声明式编程等核心特性,极大简化了开发复杂度。本系列将深入解析Spring框架核心原理及Spring Boot、Cloud、Security等生态组件,助力开发者构建高效、可扩展的应用体系。(238字)
|
6月前
|
人工智能 Java 开发者
阿里出手!Java 开发者狂喜!开源 AI Agent 框架 JManus 来了,初次见面就心动~
JManus是阿里开源的Java版OpenManus,基于Spring AI Alibaba框架,助力Java开发者便捷应用AI技术。支持多Agent框架、网页配置、MCP协议及PLAN-ACT模式,可集成多模型,适配阿里云百炼平台与本地ollama。提供Docker与源码部署方式,具备无限上下文处理能力,适用于复杂AI场景。当前仍在完善模型配置等功能,欢迎参与开源共建。
2656 58
阿里出手!Java 开发者狂喜!开源 AI Agent 框架 JManus 来了,初次见面就心动~
|
5月前
|
消息中间件 缓存 Java
Spring框架优化:提高Java应用的性能与适应性
以上方法均旨在综合考虑Java Spring 应该程序设计原则, 数据库交互, 编码实践和系统架构布局等多角度因素, 旨在达到高效稳定运转目标同时也易于未来扩展.
381 8
|
5月前
|
存储 安全 Java
《数据之美》:Java集合框架全景解析
Java集合框架是数据管理的核心工具,涵盖List、Set、Map等体系,提供丰富接口与实现类,支持高效的数据操作与算法处理。
|
5月前
|
存储 算法 安全
Java集合框架:理解类型多样性与限制
总之,在 Java 题材中正确地应对多样化与约束条件要求开发人员深入理解面向对象原则、范式编程思想以及JVM工作机理等核心知识点。通过精心设计与周密规划能够有效地利用 Java 高级特征打造出既健壮又灵活易维护系统软件产品。
163 7
|
6月前
|
SQL Java 数据库连接
区分iBatis与MyBatis:两个Java数据库框架的比较
总结起来:虽然从技术角度看,iBATIS已经停止更新但仍然可用;然而考虑到长期项目健康度及未来可能需求变化情况下MYBATISS无疑会是一个更佳选择因其具备良好生命周期管理机制同时也因为社区力量背书确保问题修复新特征添加速度快捷有效.
498 12
|
7月前
|
存储 缓存 安全
Java集合框架(三):Map体系与ConcurrentHashMap
本文深入解析Java中Map接口体系及其实现类,包括HashMap、ConcurrentHashMap等的工作原理与线程安全机制。内容涵盖哈希冲突解决、扩容策略、并发优化,以及不同Map实现的适用场景,助你掌握高并发编程核心技巧。
|
消息中间件 Java Kafka
kafka 客户端使用Avro序列化
kafka 客户端使用Avro序列化
485 0
|
分布式计算 Java Hadoop
JAVA—其他—Avro序列化
Avro是hadoop的一个用于序列化的组件 理解特点: 1. 高效 2. 序列化后体积小 3. 动态 动态指的是数据的结构一旦定义,可以在多处语言生成实体类
458 0
|
存储 分布式计算 Java
深入对比Java与Hadoop大数据序列化机制Avro
Java有自己提供的序列化机制,而我们的Hadoop也提供了自己的序列化机制,二者究竟有什么差异呢?为什么Hadoop要重新设计自己的序列化体系?序列化大数据对象的过程,Writable接口底层源码实现。

推荐镜像

更多