maven protobuf 编译插件使用 (1)

背景

使用maven的protobuf插件可以在maven compile阶段编译.proto文件,生成.java文件。
这种编译方式比手动执行protoc命令,后面跟一堆易忘的参数(每次编译都得google或找之前记的笔记),要高效省心得多。

使用

网上搜索了一番,发现这个插件相对使用量多一些。

<plugin>
    <groupId>org.xolstice.maven.plugins</groupId>
    <artifactId>protobuf-maven-plugin</artifactId>
    <version>0.5.1</version>
</plugin>

在项目的pom.xml中加上如下配置后

<plugin>
    <groupId>org.xolstice.maven.plugins</groupId>
    <artifactId>protobuf-maven-plugin</artifactId>
    <version>0.5.1</version>
    <configuration>
        <!--本地protoc编译命令位置-->
        <protocExecutable>/usr/local/bin/protoc3</protocExecutable>
        <!--proto文件所在目录-->
        <protoSourceRoot>src/main/resources</protoSourceRoot>
        <!--产出java文件的目标目录-->
        <outputDirectory>src/main/java</outputDirectory>
        <!--是否清空上面配置目录outputDirectory-->
        <clearOutputDirectory>false</clearOutputDirectory>
    </configuration>
</plugin>

在resouce目录中定义好proto文件,执行ll -r后proto所在文件目录如下:

./src/main/resources:
total 24
-rw-r--r--  1 sakura1  staff  384 Dec  6 20:44 log4j.properties
-rw-r--r--  1 sakura1  staff  181 Apr 18 17:20 student.proto
-rw-r--r--  1 sakura1  staff  179 Apr 18 17:19 teacher.proto

定义的proto文件如下:

syntax = "proto3";

option java_package = "me.fengfshao.pb";
option java_outer_classname = "StudentProto";

message Student{
  string name=1;
  string address=2;
  uint32 age=3;
}
syntax = "proto3";

option java_package = "me.fengfshao.pb";
option java_outer_classname = "TeacherProto";
****
message Teacher{
  string name=1;
  string address=2;
  uint32 age=3;
}

在项目中根目录 执行mvn protobuf:compile(或是利用idea的mvn插件,Lifecycle下面的Plugins,找到protobuf),执行完成后,可以发现.java文件出现在了对应的包中。

如果需要在代码编译时重新编译,可以将插件执行绑定在maven的生命周期中,在插件配置中加入如下内容:

  <executions>
      <execution>
          <phase>process-sources</phase>
          <goals>
              <goal>compile</goal>
          </goals>
      </execution>
  </executions>
posted @ 2021-06-10 14:49  即便那总是过去  阅读(2946)  评论(0编辑  收藏  举报