前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用protoc-jar-maven-plugin生成grpc项目

使用protoc-jar-maven-plugin生成grpc项目

作者头像
方亮
发布2024-05-24 19:19:12
410
发布2024-05-24 19:19:12
举报
文章被收录于专栏:方亮方亮
大纲

  • 环境
  • 准备工作
    • 目录结构
  • pom.xml
    • 新增grpc依赖
    • 分割message和service生成
    • 完整文件
  • 测试代码
  • 代码仓库
  • 参考资料

《使用protobuf-maven-plugin生成grpc项目》中我们使用protobuf-maven-plugin完成了grpc代码的翻译。本文我们将只是替换pom.xml中的部分内容,使用protoc-jar-maven-plugin来完成相同的功能。总体来说protoc-jar-maven-plugin方案更加简便。

环境

《使用protobuf-maven-plugin生成grpc项目》

准备工作

目录结构

《使用protobuf-maven-plugin生成grpc项目》

pom.xml

本次pom.xml的修改我们将基于《在不同操作系统上自动生成Protocol Buffers的Java语言包的方法2》。因为它是基于protoc-jar-maven-plugin翻译proto的message类型,而本文只需要新增对grpc的支持即可。

新增grpc依赖

这块的内容和《使用protobuf-maven-plugin生成grpc项目》中一致。

代码语言:javascript
复制
<properties>
    <io-grpc.version>1.63.0</io-grpc.version>
</properties>

<dependencies>
    <dependency>
        <groupId>io.grpc</groupId>
        <artifactId>grpc-netty-shaded</artifactId>
        <version>${io-grpc.version}</version>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>io.grpc</groupId>
        <artifactId>grpc-protobuf</artifactId>
        <version>${io-grpc.version}</version>
    </dependency>
    <dependency>
        <groupId>io.grpc</groupId>
        <artifactId>grpc-stub</artifactId>
        <version>${io-grpc.version}</version>
    </dependency>
    <dependency> <!-- necessary for Java 9+ -->
        <groupId>org.apache.tomcat</groupId>
        <artifactId>annotations-api</artifactId>
        <version>6.0.53</version>
        <scope>provided</scope>
    </dependency>

</dependencies>

分割message和service生成

之前我们使用下面代码生成message类型代码。

代码语言:javascript
复制
<configuration>
    <protoSourceRoot>${project.basedir}/src/main/proto</protoSourceRoot>
    <outputDirectory>${project.basedir}/src/main/java/protojava</outputDirectory>
    <protocArtifact>com.google.protobuf:protoc:${protobuf-java.version}:exe:${os.detected.classifier}</protocArtifact>
</configuration>

由于message和service类型生成指令不一样,于是我们要分开处理。这就要使用到outputTargets标签。而该标签和configuration/outputDirectory互斥,于是就要去掉configuration/outputDirectory,并在outputTargets/outputTarget下新增outputDirectory

代码语言:javascript
复制
<outputTargets>
    <outputTarget>
        <type>java</type>
        <outputDirectory>src/main/java/protojava</outputDirectory>
    </outputTarget>
    <outputTarget>
        <type>grpc-java</type>
        <pluginArtifact>io.grpc:protoc-gen-grpc-java:${io-grpc.version}</pluginArtifact>
        <outputDirectory>src/main/java/protojava</outputDirectory>
    </outputTarget>
</outputTargets>

上侧java部分用于生成proto中的message部分;grpc-java则用于生成proto中的service部分。 protoc的翻译操作也不用像使用protobuf-maven-plugin方案那样,要执行一次protobuf:compile后再执行一次protobuf:compile-custom 。而只需要执行一次protoc-jar:run。

在这里插入图片描述
在这里插入图片描述

完整文件

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>proto-message-gen</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>21</maven.compiler.source>
        <maven.compiler.target>21</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <protobuf-java.version>4.26.1</protobuf-java.version>
        <io-grpc.version>1.63.0</io-grpc.version>
    </properties>

    <dependencies>

        <dependency>
            <groupId>com.google.protobuf</groupId>
            <artifactId>protobuf-java</artifactId>
            <version>${protobuf-java.version}</version>
        </dependency>
        <dependency>
            <groupId>com.google.protobuf</groupId>
            <artifactId>protobuf-java-util</artifactId>
            <version>${protobuf-java.version}</version>
        </dependency>

        <dependency>
            <groupId>io.grpc</groupId>
            <artifactId>grpc-netty-shaded</artifactId>
            <version>${io-grpc.version}</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>io.grpc</groupId>
            <artifactId>grpc-protobuf</artifactId>
            <version>${io-grpc.version}</version>
        </dependency>
        <dependency>
            <groupId>io.grpc</groupId>
            <artifactId>grpc-stub</artifactId>
            <version>${io-grpc.version}</version>
        </dependency>
        <dependency> <!-- necessary for Java 9+ -->
            <groupId>org.apache.tomcat</groupId>
            <artifactId>annotations-api</artifactId>
            <version>6.0.53</version>
            <scope>provided</scope>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>com.github.os72</groupId>
                <artifactId>protoc-jar-maven-plugin</artifactId>
                <version>3.11.4</version>
                <executions>
                    <execution>
                        <phase>generate-sources</phase>
                        <goals>
                            <goal>run</goal>
                        </goals>
                        <configuration>
                            <protocArtifact>com.google.protobuf:protoc:${protobuf-java.version}</protocArtifact>
                            <inputDirectories>
                                <include>src/main/proto</include>
                            </inputDirectories>
                            <outputTargets>
                                <outputTarget>
                                    <type>java</type>
                                    <outputDirectory>src/main/java/protojava</outputDirectory>
                                </outputTarget>
                                <outputTarget>
                                    <type>grpc-java</type>
                                    <pluginArtifact>io.grpc:protoc-gen-grpc-java:${io-grpc.version}</pluginArtifact>
                                    <outputDirectory>src/main/java/protojava</outputDirectory>
                                </outputTarget>
                            </outputTargets>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>

测试代码

《使用protobuf-maven-plugin生成grpc项目》

代码仓库

https://github.com/f304646673/proto-gen.git

参考资料

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-05-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 大纲
  • 环境
  • 准备工作
    • 目录结构
    • pom.xml
      • 新增grpc依赖
        • 分割message和service生成
          • 完整文件
          • 测试代码
          • 代码仓库
          • 参考资料
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档