zoukankan      html  css  js  c++  java
  • 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>
    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时会提示版本号不一致

  • 相关阅读:
    LIS(nlogn) POJ 3903 Stock Exchange
    LCS(滚动数组) POJ 1159 Palindrome
    LCS(打印全路径) POJ 2264 Advanced Fruits
    3-16 提取任务(第6章)
    3-15 《元编程》第6章 3-16 hook method
    3-13《元编程》第5章Class Definitions 3-14(5-4Singleton Classes,2小时)3-15(3小时✅)
    3-11 《Ruby元编程》第4章block块 3-12
    3-9《元编程》第3章Tuesday:methods
    3-8《Ruby元编程》第二章对象模型
    2-27 最短路径《啊哈算法》2-28完成四种算法
  • 原文地址:https://www.cnblogs.com/yjmyzz/p/generate-java-source-code-in-thrift-avro-protobuf-using-maven-plugin.html
Copyright © 2011-2022 走看看