protoc 命令不生成所有基数 类 (java)
protoc command not generating all base classes (java)
我一直在尝试从 grpc 官方仓库的 .proto
服务定义 here 生成基本的 gRPC 客户端和服务器接口。
该文件中定义的相关服务(来自上面的link)如下:
service RouteGuide {
rpc GetFeature(Point) returns (Feature) {}
rpc ListFeatures(Rectangle) returns (stream Feature) {}
rpc RecordRoute(stream Point) returns (RouteSummary) {}
rpc RouteChat(stream RouteNote) returns (stream RouteNote) {}
}
我运行的命令是protoc --java_out=${OUTPUT_DIR} path/to/proto/file
根据 grpc 站点(特别是 here),一个包含基础 class RouteGuideGrpc.RouteGuideImplBase
的 RouteGuideGrpc.java
,以及 RouteGuide 服务中定义的所有方法是应该 是从上面的 protoc
命令生成的,但我没有生成该文件。
有没有人遇到过类似的问题?官方文档是否完全不正确?关于我可以做些什么来生成丢失的 class?
有没有人有任何建议?
这可能会对以后的其他人有所帮助,所以我会回答我自己的问题。
我认为 gRPC 代码生成的 java 文档不是完全最新的,信息分散在不同的官方存储库中。
事实证明,为了按预期生成所有 gRPC java 服务基础 类,您需要像这样向 protoc
cli 指定一个附加标志 grpc-java_out=${OUTPUT_DIR}
。但是为了让这个额外的标志起作用,你需要做一些额外的事情:
- gRPC 协议插件的二进制文件 Java
protoc-gen-grpc-java
:您可以从 maven central here (the link is for v1.17.1). If there isn't a prebuilt binary available for your system, you can compile one yourself from the github repo instructions here. 获得适用于您系统的相关插件
确保将二进制位置添加到您的 PATH 环境变量中,并将二进制文件重命名为“protoc-gen-grpc-java
”(这是 protoc
cli 期望的名称有路径)。
最后,您已准备好 运行 正确的命令 protoc --java_out=${OUTPUT_DIR} --grpc-java_out=${OUTPUT_DIR} path/to/proto/file
现在应该会生成像 RouteGuideGrpc.RouteGuideImplBase
这样的服务基础 类以前不是。
我希望这个解释对以后的其他人有所帮助。
我一直在尝试从 grpc 官方仓库的 .proto
服务定义 here 生成基本的 gRPC 客户端和服务器接口。
该文件中定义的相关服务(来自上面的link)如下:
service RouteGuide {
rpc GetFeature(Point) returns (Feature) {}
rpc ListFeatures(Rectangle) returns (stream Feature) {}
rpc RecordRoute(stream Point) returns (RouteSummary) {}
rpc RouteChat(stream RouteNote) returns (stream RouteNote) {}
}
我运行的命令是protoc --java_out=${OUTPUT_DIR} path/to/proto/file
根据 grpc 站点(特别是 here),一个包含基础 class RouteGuideGrpc.RouteGuideImplBase
的 RouteGuideGrpc.java
,以及 RouteGuide 服务中定义的所有方法是应该 是从上面的 protoc
命令生成的,但我没有生成该文件。
有没有人遇到过类似的问题?官方文档是否完全不正确?关于我可以做些什么来生成丢失的 class?
有没有人有任何建议?这可能会对以后的其他人有所帮助,所以我会回答我自己的问题。
我认为 gRPC 代码生成的 java 文档不是完全最新的,信息分散在不同的官方存储库中。
事实证明,为了按预期生成所有 gRPC java 服务基础 类,您需要像这样向 protoc
cli 指定一个附加标志 grpc-java_out=${OUTPUT_DIR}
。但是为了让这个额外的标志起作用,你需要做一些额外的事情:
- gRPC 协议插件的二进制文件 Java
protoc-gen-grpc-java
:您可以从 maven central here (the link is for v1.17.1). If there isn't a prebuilt binary available for your system, you can compile one yourself from the github repo instructions here. 获得适用于您系统的相关插件
确保将二进制位置添加到您的 PATH 环境变量中,并将二进制文件重命名为“
protoc-gen-grpc-java
”(这是protoc
cli 期望的名称有路径)。最后,您已准备好 运行 正确的命令
protoc --java_out=${OUTPUT_DIR} --grpc-java_out=${OUTPUT_DIR} path/to/proto/file
现在应该会生成像RouteGuideGrpc.RouteGuideImplBase
这样的服务基础 类以前不是。
我希望这个解释对以后的其他人有所帮助。