背景
使用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>