gpt4 book ai didi

protocol-buffers - protoc 命令未生成所有基类(java)

转载 作者:行者123 更新时间:2023-12-01 12:09:02 32 4
gpt4 key购买 nike

我一直在尝试从 .proto 生成基本的 gRPC 客户端和服务器接口(interface)。服务定义 here来自 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 站点(特别是 here ), RouteGuideGrpc.java其中包含一个基类 RouteGuideGrpc.RouteGuideImplBase , RouteGuide 服务中定义的所有方法都是 假设 protoc 生成上面的命令,但没有为我生成该文件。

有没有人遇到过类似的问题?官方文档根本不正确吗?有人对我能做些什么来生成那个缺失的类(class)有什么建议吗?

最佳答案

这可能会在将来对其他人有所帮助,所以我会回答我自己的问题。

我相信用于 gRPC 代码生成的 java 文档并不完全是最新的,并且信息分散在不同的官方存储库中。

事实证明,为了按预期生成所有 gRPC java 服务基类,您需要为 protoc 指定一个附加标志。 cli 像这样 grpc-java_out=${OUTPUT_DIR} .但是为了让那个额外的标志起作用,你需要有一些额外的东西:

  • gRPC Java 的 protoc 插件的二进制文件 protoc-gen-grpc-java :您可以从 maven Central here 获取与您的系统相关的系统。 (链接适用于 v1.17.1)。如果您的系统没有可用的预构建二进制文件,您可以从 github 存储库指令 here 自己编译一个。 .
  • 确保将二进制位置添加到您的 PATH 环境变量中,并将二进制重命名为“protoc-gen-grpc-java”(即 protoc cli 期望在路径中具有的名称)。
  • 最后,您可以运行正确的命令 protoc --java_out=${OUTPUT_DIR} --grpc-java_out=${OUTPUT_DIR} path/to/proto/file现在是服务基类,如 RouteGuideGrpc.RouteGuideImplBase应该在以前没有时生成。

  • 我希望这个解释可以帮助其他人在 future 。

    关于protocol-buffers - protoc 命令未生成所有基类(java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53976614/

    32 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com