- 添加依賴
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
<version>3.12.4</version>
</dependency>
- maven插件配置(pom.xml)
<build>
<extensions>
<extension>
<groupId>kr.motd.maven</groupId>
<artifactId>os-maven-plugin</artifactId>
<version>1.6.2</version>
</extension>
</extensions>
<plugins>
<plugin>
<groupId>org.xolstice.maven.plugins</groupId>
<artifactId>protobuf-maven-plugin</artifactId>
<version>0.6.1</version>
<extensions>true</extensions>
<configuration>
<protoSourceRoot>${project.basedir}/src/main/proto</protoSourceRoot>
<outputDirectory>${project.build.directory}/generated-sources/protobuf/java</outputDirectory>
<!--設定是否生成java檔案之前清空outputDirectory的檔案,預設值為true,設定false時會覆寫同名檔案-->
<clearOutputDirectory>true</clearOutputDirectory>
<protocArtifact>com.google.protobuf:protoc:3.12.4:exe:${os.detected.classifier}</protocArtifact>
<pluginId>grpc-java</pluginId>
</configuration>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>compile-custom</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
- 定義proto檔案
syntax = "proto3";
option java_package = "com.yicj.study.proto" ;
option java_outer_classname = "PersonModel" ;
message Person{
int32 id = 1 ;
string name = 2 ;
string email = 3 ;
}
- 找到plugins中的protobuf點選protobuf:compile生成對應的java檔案(target/generated-sources/protobuf/java)
- 将PersonModel檔案移動到源碼包下com.yicj.study.proto中
- 編寫單元測試
public class PersonModelTest {
@Test
public void hello() throws InvalidProtocolBufferException {
PersonModel.Person forezp = PersonModel.Person.newBuilder()
.setId(1).setName("forezp").setEmail("[email protected]").build() ;
for (byte b : forezp.toByteArray()){
System.out.print(b);
}
String s = CommonUtil.base64Encode(forezp.toByteArray());
System.out.println();
System.out.println("====================> " + s);
System.out.println();
log.info("\n" + "bytes長度" + forezp.toByteString().size());
log.info("========forezp Byte 結束==========");
log.info("========forezp 反序列化生成對象開始======");
PersonModel.Person forezpCopy = PersonModel.Person.parseFrom(forezp.toByteArray()) ;
log.info(forezpCopy.toString());
log.info("====== forezp 反系列化生成對象結束=======");
}
}