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>