zoukankan      html  css  js  c++  java
  • 基于 maven 实现跨平台编译 protobuf 文件

    基于 maven 实现跨平台编译 protobuf 文件

    需求

    在团队协作中使用 protobuf 时, 有以下几点需求:

    1. protoc 跨平台,团队成员不需要在自己的平台上修改 pom.xml
    2. 方便持续集成,不需要再在集成服务器再单独安装 protoc ,增加运维工作量和项目的特殊性

    分析

    google 官方提供了不同平台的 protoc 程序,并可以通过 maven 中央仓库获取,所以如果 maven plugin 能够检测当前系统平台,并主动去 中央仓库 下载对应平台的 protoc 程序,然后再编译 .proto 文件,那么就可以实现

    实现

    • 可以通过 os-maven-plugin 插件来侦测当前系统平台
    • 可以通过 protobuf-maven-plugin 插件来下载 protoc 程序,并编译 .proto 文件。

    程序目录如下:

    代码结构
    代码结构

    pom.xml 具体配置如下:

    <build>
    
        <extensions>
          <extension>
            <groupId>kr.motd.maven</groupId>
            <artifactId>os-maven-plugin</artifactId>
            <version>1.5.0.Final</version>
          </extension>
        </extensions>
        <plugins>
          <plugin>
            <groupId>org.xolstice.maven.plugins</groupId>
            <artifactId>protobuf-maven-plugin</artifactId>
            <version>0.5.1</version>
            <extensions>true</extensions>
            <configuration>
              <!-- .proto 文件的目录-->
              <protoSourceRoot>src/main/proto</protoSourceRoot>
              <!-- 编译后的文件存放目录 -->
              <outputDirectory>${project.build.sourceDirectory}</outputDirectory>
             <!--是否每次执行都清除输出目录-->
              <clearOutputDirectory>false</clearOutputDirectory>
              <!-- 这句很重要,这句插件会去仓库下载 protoc 程序,exe 与 windows 的可执行程序 exe 可不一样,在这,不管是什么平台,都是 exe ,可见下图 -->
              <protocArtifact>com.google.protobuf:protoc:3.6.1:exe:${os.detected.classifier}</protocArtifact>
            </configuration>
            <executions>
              <execution>
                <goals>
                  <goal>compile</goal>
                  <goal>test-compile</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>
    
    

    protoc 程序在 maven 中央仓库的存储格式
    protoc 程序在 maven 中央仓库的存储格式

    然后通过插件进行编译即可,如下:

    编译
    编译

    需要特别注意两点

    • protocArtifact 的配置不能按照官方文档的示例(下图),配置到 execution 元素下,这样在编译的时候会报错。
    • maven 中需要添加对 protobuf-java jar 的依赖,因为 .proto 文件编译后的 java 文件会依赖此包

    官方配置示例
    官方配置示例

    参考文章

    1. protobuf-maven-plugin : https://www.xolstice.org/protobuf-maven-plugin/
  • 相关阅读:
    转:C++ 智能指针的正确使用方式
    C/C++各个周期的学习
    转: 工作中用的C++库
    转:【软件设计】深入理解日志系统的意义
    初级爬虫第四天
    初级爬虫第三天
    初级爬虫第二天
    初级爬虫第一天
    pep8介绍
    MySQL训练营01
  • 原文地址:https://www.cnblogs.com/feshfans/p/9658108.html
Copyright © 2011-2022 走看看