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

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

1.引言

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

目前通用的做法:

  • 手动编译(较为麻烦)

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

    下载页面:

    Idea中使用Maven插件配置Protobuf方法总结_第1张图片

    用于编译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。

下载后解压目录如下:

Idea中使用Maven插件配置Protobuf方法总结_第2张图片

2.2Idea引入依赖

protobuf中央仓库地址:

maven protobuf 包依赖如下:

<dependencies>
        <dependency>
            <groupId>io.nettygroupId>
            <artifactId>netty-allartifactId>
            <version>4.1.70.Finalversion>
            <scope>compilescope>
        dependency>
        <dependency>
            <groupId>com.google.protobufgroupId>
            <artifactId>protobuf-javaartifactId>
            <version>3.19.1version>
        dependency>
    dependencies>

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

protobuf-maven插件依赖:

<plugins>
            <plugin>
                <groupId>org.xolstice.maven.pluginsgroupId>
                <artifactId>protobuf-maven-pluginartifactId>
                <version>0.6.1version>
                <configuration>
                    <protocExecutable>
                        D:\software\protoc-3.19.1-win64\bin\protoc.exe  
                    protocExecutable>
                    <pluginId>protoc-javapluginId>
                    
                    <protoSourceRoot>${project.basedir}/src/main/java/com/kevin/protoprotoSourceRoot>
                    
                    <outputDirectory>${project.basedir}/src/main/javaoutputDirectory>
                    
                    <clearOutputDirectory>falseclearOutputDirectory>
                configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>compilegoal>
                        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指令

Idea中使用Maven插件配置Protobuf方法总结_第3张图片

2.执行过程

Idea中使用Maven插件配置Protobuf方法总结_第4张图片

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

Idea中使用Maven插件配置Protobuf方法总结_第5张图片

生成目录结构:

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》尼恩著

你可能感兴趣的:(Java,intellij-idea,maven,java)