Protocol buffers protoc命令不生成所有基类(java)
我一直在尝试从gRPC官方repo的Protocol buffers protoc命令不生成所有基类(java),protocol-buffers,grpc,grpc-java,protobuf-java,Protocol Buffers,Grpc,Grpc Java,Protobuf Java,我一直在尝试从gRPC官方repo的.proto服务定义生成基本的gRPC客户端和服务器接口。 该文件(从上面的链接)中定义的相关服务如下: service RouteGuide { rpc GetFeature(Point) returns (Feature) {} rpc ListFeatures(Rectangle) returns (stream Feature) {} rpc RecordRoute(stream Point) returns (RouteSum
.proto
服务定义生成基本的gRPC客户端和服务器接口。
该文件(从上面的链接)中定义的相关服务如下:
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站点(具体地说,routeguiderpc.java
,它包含一个基类routeguiderpc.RouteGuideImplBase
,其中RouteGuide服务中定义的所有方法都假定是由上面的protoc
命令生成的,但是这个文件没有为我生成
有没有人面临过类似的问题?官方文件是否完全不正确?有人会对我如何生成缺少的类有什么建议吗?这可能会在将来帮助其他人,所以我会回答自己的问题 我相信用于gRPC代码生成的java文档不是完全最新的,并且信息分散在不同的官方存储库中 因此,为了按预期生成所有GRPCJava服务基类,您需要为
protoc
cli指定一个额外的标志,就像SogRPC-java\u out=${OUTPUT\u DIR}
。但是为了让这个额外的标志发挥作用,你需要一些额外的东西:
protoc gen gRPC Java
:您可以从maven central(该链接适用于v1.17.1)获得适用于您系统的相关文件。如果您的系统没有预构建的二进制文件,您可以根据github repo指令自己编译一个protoc gen grpc java
”(即protoc
cli希望在路径中使用的名称)protoc--java_out=${OUTPUT_DIR}--grpc-java_out=${OUTPUT_DIR}path/to/proto/file
,现在像routeguidegrc.RouteGuideImplBase
这样的服务基类应该在以前没有的时候生成我希望这个解释将来能帮助其他人。您也可以使用
--plugin
标志,而不是重命名为proto-gen grpc-java
。看见