【问题标题】:protoc command not generating all base classes (java)protoc 命令未生成所有基类(java)
【发布时间】:2019-05-27 08:18:59
【问题描述】:

我一直在尝试从 grpc 官方 repo 中的 .proto 服务定义 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.RouteGuideImplBase 的 RouteGuideGrpc.java,以及在 RouteGuide 服务中定义的所有方法假定已经生成来自上面的protoc 命令,但没有为我生成该文件。

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

【问题讨论】:

    标签: protocol-buffers grpc grpc-java protobuf-java


    【解决方案1】:

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

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

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

    1. 用于 gRPC Java protoc-gen-grpc-java 的 protoc 插件的二进制文件:您可以从 maven Central here 获取适用于您系统的相关文件(链接适用于 v1.17.1)。如果您的系统没有可用的预构建二进制文件,您可以从 github repo 指令here 自己编译一个。
    2. 1234563
    3. 最后,您已准备好运行正确的命令protoc --java_out=${OUTPUT_DIR} --grpc-java_out=${OUTPUT_DIR} path/to/proto/file,现在应该生成像RouteGuideGrpc.RouteGuideImplBase 这样的服务基类,而以前没有。

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-08
    • 1970-01-01
    • 2019-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-25
    相关资源
    最近更新 更多