1、pom.xml
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
<version>3.22.3</version>
</dependency>
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-netty-shaded</artifactId>
<version>1.64.0</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-protobuf</artifactId>
<version>1.64.0</version>
</dependency>
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-stub</artifactId>
<version>1.64.0</version>
</dependency>
<build>
<extensions>
<extension>
<groupId>kr.motd.maven</groupId>
<artifactId>os-maven-plugin</artifactId>
<version>1.7.1</version>
</extension>
</extensions>
<plugins>
<plugin>
<groupId>org.xolstice.maven.plugins</groupId>
<artifactId>protobuf-maven-plugin</artifactId>
<version>0.6.1</version>
<configuration>
<protocArtifact>com.google.protobuf:protoc:3.25.1:exe:${os.detected.classifier}</protocArtifact>
<pluginId>grpc-java</pluginId>
<pluginArtifact>io.grpc:protoc-gen-grpc-java:1.64.0:exe:${os.detected.classifier}</pluginArtifact>
</configuration>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>compile-custom</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
或者有个这个
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-all</artifactId>
<version>1.46.0</version>
</dependency>
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
<version>1.3.2</version>
</dependency>
protocArtifact 配置解读
<protocArtifact>com.google.protobuf:protoc:3.25.1:exe:${os.detected.classifier}</protocArtifact>
com.google.protobuf:protoc:3.25.1:
这指定了要使用的protoc(Protocol Buffers的编译器)的版本和坐标。在这里,它引用了Google的protoc版本3.25.1。
exe: 这指定了artifact的类型是“可执行文件”(executable)。这意味着Maven将尝试下载与给定版本相对应的protoc可执行文件。
${os.detected.classifier}:
这是一个Maven属性,它通常在构建时通过插件(如os-maven-plugin)来设置,并根据运行Maven的操作系统来确定合适的分类器(classifier)。例如,它可能是windows-x86_64、macosx-x86_64或linux-x86_64,以便Maven可以下载与当前操作系统兼容的protoc版本。
pluginArtifact 配置
<pluginArtifact>io.grpc:protoc-gen-grpc-java:1.64.0:exe:${os.detected.classifier}</pluginArtifact>
io.grpc:protoc-gen-grpc-java:1.64.0:
这指定了要使用的gRPC Java插件的版本和坐标。该插件用于从.proto
文件生成gRPC Java代码。
同样,exe指定了artifact的类型是“可执行文件”。
${os.detected.classifier}
的作用与上面相同,确保下载的gRPC Java插件与当前操作系统兼容。
总的来说,这两段配置确保了Maven能够下载与当前操作系统兼容的protoc编译器和gRPC Java插件,并在构建过程中使用它们来从.proto文件生成Java代码。
然后是一个后缀为.proto的文件,注意
注意proto的文件目录要和java的文件目录在同一级,也就是指proto的文件目录是在main的下级
例如hello.proto文件内容
syntax = "proto3";
/ /版本声明,使用Protocol Buffers v3版本
package hello;
option java_package = "io.grpc.aaa";
option java_outer_classname = "HelloProto";
//输出的文件名
service Hello {
rpc SayHello (HelloRequest) returns (HelloResponse) {}
}
message HelloRequest {
string name = 1;
}
message HelloResponse {
string message = 1;
}
运行,mvn clean,也就是下面这三步
之后就可以看到啦