Idea中使用Maven插件配置Protobuf方法总结

Idea中使用Maven插件配置Protobuf方法总结

1.引言

在学习netty过程中,使用protobuf包序列化,需要将.proto文件进行编译。

目前通用的做法:

  • 手动编译(较为麻烦)

  • 下载protoc-x.x.x-xx 工具手动编译

    下载页面:

    用于编译proto文件(protoc -I=源地址 --java_out=目标地址 源地址/xxx.proto
    例子:
    protoc.exe --java_out=./src/main/java ./MsgInfo.proto
    
  • 通过idea插件进行编译(较为简单)

2.方法

2.1下载Protoc相关软件

下载地址如上部分所示,选择适合自己电脑操作系统的版本。本电脑操作系统为win11 64位,应而选择安装包为protoc-3.19.1-win64.zip

下载后解压目录如下:

prococ-3.19.1-win64安装目录

2.2Idea引入依赖

protobuf中央仓库地址:

maven protobuf 包依赖如下:

<dependencies>
        <dependency>
            <groupId>io.netty</groupId>
            <artifactId>netty-all</artifactId>
            <version>4.1.70.Final</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>com.google.protobuf</groupId>
            <artifactId>protobuf-java</artifactId>
            <version>3.19.1</version>
        </dependency>
    </dependencies>

protobuf-maven-plugin中央仓库地址:

protobuf-maven插件依赖:

<plugins>
            <plugin>
                <groupId>org.xolstice.maven.plugins</groupId>
                <artifactId>protobuf-maven-plugin</artifactId>
                <version>0.6.1</version>
                <configuration>
                    <protocExecutable>
                        D:\software\protoc-3.19.1-win64\bin\protoc.exe  <!-- 刚刚安装的位置 -->
                    </protocExecutable>
                    <pluginId>protoc-java</pluginId>
                    <!-- proto文件放置的目录 -->
                    <protoSourceRoot>${project.basedir}/src/main/java/com/kevin/proto</protoSourceRoot>
                    <!-- 生成文件的目录 -->
                    <outputDirectory>${project.basedir}/src/main/java</outputDirectory>
                    <!-- 生成文件前是否把目标目录清空,这个最好设置为false,以免误删项目文件 -->
                    <clearOutputDirectory>false</clearOutputDirectory>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>compile</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>

配置选项说明:

protoSourceRoot:proto消息结构体所在文件的路径。

outputDirectory:生成的POJO类和Builder类的目标路径。protocExecutable:protobuf的Java代码生成工具的protoc3.6.1.exe可执行文件的路径。配置好之后,执行插件的compile命令,Java代码就生成了;在Maven的项目编译时,POJO类和Builder类也会自动生成。

2.3建立Msginfo.proto

syntax = "proto3";
package com.kevin.domain;

option java_package = "com.kevin.domain";
option java_multiple_files = true;
option java_outer_classname = "MsgInfo";

message MsgBody {

  string channelId = 1;
  string msgInfo   = 2;

}
  • .proto文件的头部声明中,需要声明一下所使用的Protobuf协议版本,示例中使用的是"proto3"版本。也可以使用旧一点的"proto2"版本,两个版本的消息格式有一些细微的不同,默认的协议版本为"proto2"。

  • **option java_package **选项的作用为:在生成proto文件中消息的POJO类和Builder(构造者)的Java代码时,将生成的Java代码放入该选项所指定的package类路径中

  • option java_outer_classname选项的作用为:在生成proto文件所对应的Java代码时,生成的Java外部类使用配置的名称。

  • proto文件中,使用message关键字来定义消息的结构体。在生成proto对应的Java代码时,每个具体的消息结构体将对应于一个最终的Java POJO类。结构体的字段(Field)对应到POJO类的属性(Attribute)。也就是说,每定义一个message结构体相当于声明一个Java中的类。proto文件的message可以内嵌message,就像Java的内部类一样

  • 每个消息结构体可以有多个字段。定义一个字段的格式为“类型名称 = 编号”。例如,“string channelId = 1;”表示该字段是String类型,字段名为channelId,编号为2。字段编号表示在Protobuf数据包的序列化、反序列化时该字段的具体排序。

2.4执行插件compile命令

1.使用idea 中maven插件指令,点击Plugins中的compile指令

2.执行过程

插件执行过程

3.结果在domain中生成pojo类和builder类

生成pojo类和builder类

生成目录结构:

D:.
├─src
│  ├─main
│  │  ├─java
│  │  │  └─com
│  │  │      └─kevin
│  │  │          ├─client
│  │  │          ├─domain
│  │  │          ├─proto
│  │  │          ├─server
│  │  │          └─util
│  │  └─resources
│  └─test
│      └─java
└─target
    └─protoc-dependencies
        └─6d2f12ab31e91e52b8d93b03a6ed30c4
            └─google
                └─protobuf
                    └─compiler

引用

《Java高并发核心编程(卷I):NIO、Netty、Redis、Zookeeper》尼恩著

~~

引用

《Java高并发核心编程(卷I):NIO、Netty、Redis、Zookeeper》尼恩著

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在你的问题,你提到了在IDEAMaven插件出现了红色错误提示。根据引用\[1\]的代码片段,你可能需要在你的pom.xml文件添加Spring Boot Maven插件配置。确保你的pom.xml文件包含以下代码: ```xml <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> ``` 此外,根据引用\[2\]和引用\[3\]的内容,你还需要检查以下几点: 1. 确保你的IDEA版本和Maven版本兼容。如果你的IDEA版本和Maven版本不兼容,你可能会遇到报错信息。你可以尝试将Maven版本更改为与你的IDEA版本兼容的版本。 2. 检查你的pom.xml文件的artifactId是否正确。确保你的artifactId正确命名,并且没有拼写错误。 3. 确保你的pom.xml文件插件配置包含正确的版本号。根据引用\[3\]的内容,你可以尝试添加版本号,例如`<version>2.3.0.RELEASE</version>`。 通过检查以上几点,你应该能够解决在IDEAMaven插件爆红的问题。 #### 引用[.reference_title] - *1* *3* [ideamaven插件爆红解决](https://blog.csdn.net/kunAUGUST/article/details/118067358)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [ideaMaven出现插件爆红或无dependencies问题解决](https://blog.csdn.net/weixin_44500035/article/details/124999497)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值