Maven根据Google proto文件自动生成java对象

引言

在分布式系统开发中,Google Protocol Buffers(简称Protobuf)凭借其​​高效序列化能力​​和​​跨语言兼容性​​,已成为微服务通信、数据存储等场景的首选协议格式。本文将以Maven为核心工具链,详解如何通过.proto文件自动生成Java对象,并实现与Spring Boot项目的深度集成。

一、Maven插件配置

推荐使用protobuf-maven-plugin插件

  • ​自动化编译​​:通过protoc编译器将.proto文件生成Java代码
  • ​多平台支持​​:通过os-maven-plugin自动识别操作系统架构(Windows/Linux/macOS)
  • ​版本管理​​:支持Protobuf 3.x及gRPC扩展
    
        org.xolstice.maven.plugins
        protobuf-maven-plugin
        0.6.1
        
          ./proto
          
            **/spec/**
          
        
      

其中,protoSourceRoot是存放proto文件的相对路径地址,include是在相对路径下更小的文件包范围限制。准比的proto文件如下:

syntax = "proto3";
package org.spec.extend;
option java_package = "org.spec.extend";
message Bin{
    float left_bound = 1;
    float right_bound = 2;
    float filling_value = 4;
}

message VariableBins{
    string feature_name = 1;
    string feature_type = 2;
    repeated Bin valid_bins = 5;
    bool is_woe = 6;
}

message Bins{
    repeated VariableBins variable_bins = 1;
    string model_hash = 2;
}

二、代码生成

在Maven pom下,执行插件的compile,会自动生成对应的java文件。

Maven根据Google proto文件自动生成java对象_第1张图片

Maven根据Google proto文件自动生成java对象_第2张图片 三、项目集成

项目完整pom文件:


  4.0.0

  com.springboot.test
  pb2java
  1.0-SNAPSHOT
  jar

  pb2java
  http://maven.apache.org

  
    UTF-8
  

  
    
      junit
      junit
      3.8.1
      test
    

    
      com.google.protobuf
      protobuf-java
      3.25.5
    

    
      com.google.protobuf
      protobuf-java-util
      3.25.5
    

    
      io.grpc
      grpc-netty-shaded
      1.62.2
    

    
      io.grpc
      grpc-protobuf
      1.62.2
    

    
      io.grpc
      grpc-stub
      1.62.2
    

  


  
    
      
        org.xolstice.maven.plugins
        protobuf-maven-plugin
        0.6.1
        
          ./proto
          
            **/spec/**
          
        
      
    
  

测试代码:

 public static void main( String[] args ) throws InvalidProtocolBufferException {

        BinData.Bin bin = BinData.Bin.newBuilder()
                .setLeftBound(2.0F)
                .setRightBound(4.9F)
                .setFillingValue(0.1F)
                .build();
        System.out.println(JsonFormat.printer().print(bin));
    }

你可能感兴趣的:(java,框架技术学习,pb转java)