我无法生成 gRPC 存根 类
I can't generate the gRPC stubs classes
我设法通过 .proto 文件生成了 类,但它们在构建中。
我希望 类 在 main 中生成,因为当我要扩展存根时,无法实现这些方法。
看:
文件.proto:
syntax = "proto3";
package demogrpcserver.tcp;
option java_multiple_files = true;
option java_package = "com.example.demogrpcserver";
option java_outer_classname = "tcp";
service TCPService {
rpc execute(TCPMonitorRequest) returns (TCPMonitorResponse);
}
message TCPMonitorRequest {
string socketOpen = 1;
string messageType = 2;
}
message TCPMonitorResponse {
bool success = 1;
string txId = 2;
}
.proto 文件在主文件夹中。
有谁知道怎么解决吗?
您可以在 pom 文件中使用插件在 src 路径中自动生成 proto 文件。
<plugin>
<groupId>com.github.os72</groupId>
<artifactId>protoc-jar-maven-plugin</artifactId>
<version>3.6.0.1</version>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<includeMavenTypes>direct</includeMavenTypes>
<inputDirectories>
<include>src/main/resources</include>
</inputDirectories>
<outputTargets>
<outputTarget>
<type>java</type> <outputDirectory>src/proto/</outputDirectory>
</outputTarget>
<outputTarget>
<type>grpc-java</type>
<pluginArtifact>io.grpc:protoc-gen-grpc-java:1.15.0</pluginArtifact>
<outputDirectory>src/proto/</outputDirectory>
</outputTarget>
</outputTargets>
</configuration>
</execution>
</executions>
</plugin>
否则,您可以使用当前设置导入原型文件并对其进行扩展。
请参阅 gRPC Java 自述文件的 Generated Code section。对于非 Android Gradle 构建,您将使用:
plugins {
id 'com.google.protobuf' version '0.8.15'
}
protobuf {
protoc {
artifact = "com.google.protobuf:protoc:3.12.0"
}
plugins {
grpc {
artifact = 'io.grpc:protoc-gen-grpc-java:1.36.0'
}
}
generateProtoTasks {
all()*.plugins {
grpc {}
}
}
}
你也可以看看grpc-java examples。
您可以使用协议工具在任何您想要的地方生成您的 Java 类
protoc \
-I PATH_TO_YOUR_PROTOS \
--java_out=PATH_TO_JAVA_LOCALTION \
PROTO_FILE_NAME_THAT_WILL_BE_IN_$PATH_TO_YOUR_PROTOS
protoc \
-I $PATH_TO_YOUR_PROTOS \
--java_out=$PATH_TO_JAVA_LOCALTION \
--plugin=protoc-gen-grpc-java=/usr/local/bin/protoc-gen-grpc-java \
PROTO_FILE_NAME_THAT_WILL_BE_IN_$PATH_TO_YOUR_PROTOS
正在安装 protoc 和 protoc-grpc-java 插件
PROTOC_VERSION="3.12.0"
JAVA_GEN_VERSION="3.7.1"
JAVA_GRPC_GEN_VERSION="1.24.0"
## Protobuf compiler
RUN apt-get update && \
apt-get install -y unzip && \
wget https://github.com/protocolbuffers/protobuf/releases/download/v$PROTOC_VERSION/protoc-$PROTOC_VERSION-linux-x86_64.zip && \
unzip protoc-$PROTOC_VERSION-linux-x86_64.zip -d /usr/local/ && \
rm -rf protoc-$PROTOC_VERSION-linux-x86_64.zip
# Protobuf Java
RUN curl https://repo1.maven.org/maven2/io/grpc/protoc-gen-grpc-java/1.27.2/protoc-gen-grpc-java-1.27.2-linux-x86_64.exe -o /usr/local/bin/protoc-gen-grpc-java && \
chmod +x /usr/local/bin/protoc-gen-grpc-java
您可以找到更多信息here
我设法通过 .proto 文件生成了 类,但它们在构建中。
我希望 类 在 main 中生成,因为当我要扩展存根时,无法实现这些方法。
看:
文件.proto:
syntax = "proto3";
package demogrpcserver.tcp;
option java_multiple_files = true;
option java_package = "com.example.demogrpcserver";
option java_outer_classname = "tcp";
service TCPService {
rpc execute(TCPMonitorRequest) returns (TCPMonitorResponse);
}
message TCPMonitorRequest {
string socketOpen = 1;
string messageType = 2;
}
message TCPMonitorResponse {
bool success = 1;
string txId = 2;
}
.proto 文件在主文件夹中。
有谁知道怎么解决吗?
您可以在 pom 文件中使用插件在 src 路径中自动生成 proto 文件。
<plugin>
<groupId>com.github.os72</groupId>
<artifactId>protoc-jar-maven-plugin</artifactId>
<version>3.6.0.1</version>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<includeMavenTypes>direct</includeMavenTypes>
<inputDirectories>
<include>src/main/resources</include>
</inputDirectories>
<outputTargets>
<outputTarget>
<type>java</type> <outputDirectory>src/proto/</outputDirectory>
</outputTarget>
<outputTarget>
<type>grpc-java</type>
<pluginArtifact>io.grpc:protoc-gen-grpc-java:1.15.0</pluginArtifact>
<outputDirectory>src/proto/</outputDirectory>
</outputTarget>
</outputTargets>
</configuration>
</execution>
</executions>
</plugin>
否则,您可以使用当前设置导入原型文件并对其进行扩展。
请参阅 gRPC Java 自述文件的 Generated Code section。对于非 Android Gradle 构建,您将使用:
plugins {
id 'com.google.protobuf' version '0.8.15'
}
protobuf {
protoc {
artifact = "com.google.protobuf:protoc:3.12.0"
}
plugins {
grpc {
artifact = 'io.grpc:protoc-gen-grpc-java:1.36.0'
}
}
generateProtoTasks {
all()*.plugins {
grpc {}
}
}
}
你也可以看看grpc-java examples。
您可以使用协议工具在任何您想要的地方生成您的 Java 类
protoc \
-I PATH_TO_YOUR_PROTOS \
--java_out=PATH_TO_JAVA_LOCALTION \
PROTO_FILE_NAME_THAT_WILL_BE_IN_$PATH_TO_YOUR_PROTOS
protoc \
-I $PATH_TO_YOUR_PROTOS \
--java_out=$PATH_TO_JAVA_LOCALTION \
--plugin=protoc-gen-grpc-java=/usr/local/bin/protoc-gen-grpc-java \
PROTO_FILE_NAME_THAT_WILL_BE_IN_$PATH_TO_YOUR_PROTOS
正在安装 protoc 和 protoc-grpc-java 插件
PROTOC_VERSION="3.12.0"
JAVA_GEN_VERSION="3.7.1"
JAVA_GRPC_GEN_VERSION="1.24.0"
## Protobuf compiler
RUN apt-get update && \
apt-get install -y unzip && \
wget https://github.com/protocolbuffers/protobuf/releases/download/v$PROTOC_VERSION/protoc-$PROTOC_VERSION-linux-x86_64.zip && \
unzip protoc-$PROTOC_VERSION-linux-x86_64.zip -d /usr/local/ && \
rm -rf protoc-$PROTOC_VERSION-linux-x86_64.zip
# Protobuf Java
RUN curl https://repo1.maven.org/maven2/io/grpc/protoc-gen-grpc-java/1.27.2/protoc-gen-grpc-java-1.27.2-linux-x86_64.exe -o /usr/local/bin/protoc-gen-grpc-java && \
chmod +x /usr/local/bin/protoc-gen-grpc-java
您可以找到更多信息here