1. maven集成 protobuf相关依赖
- 引入protobuf-java依赖
<dependency> <groupId>com.google.protobuf</groupId> <artifactId>protobuf-java</artifactId> <version>${protobuf-java.version}</version> </dependency>
- 引入protobuf maven插件(protobuf-maven-plugin)
os-maven-plugin具体使用说明参见github(https://github.com/trustin/os-maven-plugin)
Enabling os-maven-plugin
on your Maven project
<project>
<build>
<extensions>
<extension>
<groupId>kr.motd.maven</groupId>
<artifactId>os-maven-plugin</artifactId>
<version>1.7.0</version>
</extension>
</extensions>
</build>
</project>
以下是一个完整的maven pom.xml示例
<?xml version="1.0" encoding="UTF-8"?>
<project
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>protobuf-demo</artifactId>
<groupId>com.github.icefoxs</groupId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<protobuf-java.version>3.19.2</protobuf-java.version>
<grpc-java.version>1.24.0</grpc-java.version>
<protoc-gen-grpc-java.version>1.43.2</protoc-gen-grpc-java.version>
<proto-google-common-protos.version>1.17.0</proto-google-common-protos.version>
<junit.version>4.12</junit.version>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
</dependency>
<!-- gRPC dependency start -->
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-netty-shaded</artifactId>
<version>${grpc-java.version}</version>
</dependency>
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-protobuf</artifactId>
<version>${grpc-java.version}</version>
</dependency>
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-stub</artifactId>
<version>${grpc-java.version}</version>
</dependency>
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-testing</artifactId>
<version>${grpc-java.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.google.api.grpc</groupId>
<artifactId>proto-google-common-protos</artifactId>
<version>${proto-google-common-protos.version}</version>
</dependency>
<!-- gRPC dependency end -->
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
<version>${protobuf-java.version}</version>
</dependency>
</dependencies>
<build>
<extensions>
<extension>
<groupId>kr.motd.maven</groupId>
<artifactId>os-maven-plugin</artifactId>
<version>1.7.0</version>
</extension>
</extensions>
<plugins>
<!-- Grpc coding plug-in-->
<plugin>
<groupId>org.xolstice.maven.plugins</groupId>
<artifactId>protobuf-maven-plugin</artifactId>
<version>0.5.0</version>
<configuration>
<protocArtifact>com.google.protobuf:protoc:${protobuf-java.version}:exe:${os.detected.classifier}
</protocArtifact>
<pluginId>grpc-java</pluginId>
<pluginArtifact>io.grpc:protoc-gen-grpc-java:${grpc-java.version}:exe:${os.detected.classifier}
</pluginArtifact>
</configuration>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>compile-custom</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>11</source>
<target>11</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
2.编写proto文件以及测试单元文件
syntax = "proto3";
option java_multiple_files = true;
option java_package = "com.github.icefoxs.protobuf.entitiy";
message User {
string name = 1;
int32 age = 2;
}
import com.google.protobuf.InvalidProtocolBufferException;
import com.github.icefoxs.protobuf.entitiy.User;
import org.junit.Test;
public class UserProtoTest {
@Test
public void test() throws InvalidProtocolBufferException {
User.Builder builder = User.newBuilder();
builder.setAge(25);
builder.setName("icefoxs");
User user = builder.build();
System.out.println("before :" + user.toString());
System.out.println("===========Person Byte==========");
for (byte b : user.toByteArray()) {
System.out.print(b);
}
System.out.println("==========byteLength" + user.toByteArray().length);
System.out.println();
System.out.println(user.toByteString().toString());
System.out.println("================================");
byte[] byteArray = user.toByteArray();
System.out.println(byteArray.length);
User p2 = User.parseFrom(byteArray);
System.out.println("after :" + p2.toString());
}
}