当前位置: 首页 > 知识库问答 >
问题:

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

艾哲
2023-03-14

我一直在尝试从生成基本的gRPC客户端和服务器接口。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) {}
}

我运行的命令是:java_out=${OUTPUT_DIR}path/to/proto/file

根据grpc网站(特别是这里),一个路由指南RPC。java,它包含一个基类RouteGuideGrpc。RouteGuideImplBase,以及RouteGuide服务中定义的所有方法都应该是从上面的protoc命令生成的,但是没有为我生成该文件。

有没有人遇到过类似的问题?官方文件是否完全不正确?还有谁会对我如何生成缺少的类有什么建议吗?


共有1个答案

厍建义
2023-03-14
匿名用户

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

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

因此,为了按预期生成所有gRPC java服务基类,您需要为协议cli指定一个额外的标志,就像gRPC-java\u out=${OUTPUT\u DIR}一样。但为了让这个额外的标志发挥作用,您需要有一些额外的东西:

>

  • gRPC Java protoc插件的二进制代码:您可以从maven central这里获得适用于您系统的相关插件(链接适用于v1.17.1)。如果您的系统没有预构建的二进制文件,您可以在这里根据github repo指令自己编译一个
  • 确保将二进制文件位置添加到PATH环境变量中,并将二进制文件重命名为“protoc gen grpc java”(即protoc-cli希望在路径中使用的名称)。

    最后,您已经准备好运行正确的命令协议--java_out=${OUTPUT_DIR}--grpc-java_out=${OUTPUT_DIR}path/to/proto/file,现在应该生成服务基类,如RouteGuideGrpc。RouteGuideImBase应该在以前没有生成的时候生成。

    我希望这个解释将来能帮助其他人。

  •  类似资料:
    • 我创建了一个简单的. proto文件并执行了编译器(protoc-2.5.0rc1-win32.zip)。为规定的包生成了一个java文件。但是,生成的文件不会编译。. proto文件很简单,只有一条消息,其中包含一堆简单类型的可选字段(正确编号)。. java文件不编译,例如: 构造函数生成了消息。FieldAccessorTable(Descriptors.Descriptor,字符串[])未

    • 问题内容: 当我不得不为一个陌生的新项目生成javadocs时,我发现我花了很长时间尝试简单地编写正确的命令,指定所有包,所有源代码树等​​,这既耗时又容易出错:我可能缺少某些资料。 假设我有一个目录myproj,在它的下面有一些软件包(以及各种其他资源和东西),在那些软件包目录下最终有一些src /目录,然后是许多my / awesome / java / project / package类型

    • 问题内容: 我有一个sql脚本(这只是架构定义)。该脚本是mysql dumb的修改版本(摆脱了h2不喜欢的坏字符)。 该脚本将运行,并且该架构已插入到h2数据库中,但是问题在于所有数据库名称都使用大写形式(“ xyz”被转换为“ XYZ”)。 我需要它们保持小写字母,因为我的应用程序正在寻找小写字母(而mysql db中的所有表都是小写字母)。 为什么会这样呢?我怎样才能告诉H2不这样做?有没有

    • 当使用keytool生成keystore时,我收到错误非法选项:genkeypair。但是当我看到帮助时,genkeypair是可用的选项。我在指挥上做错了什么? C:\program files\java\jdk1.7.0_51\bin>keytool.exe-genkeypair-alias orbis-storetype pkcs12-keyalg rsa-keysize 2048-keys

    • 在查看文档时,有一个API调用来删除单个pod,但是有一种方法可以删除所有名称空间中的所有pod吗?

    • 本文向大家介绍如何基于python生成list的所有的子集,包括了如何基于python生成list的所有的子集的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了如何基于python生成list的所有的子集,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 不使用递归且不引入标准库,单纯用两个for循环即可得出一个list的所有子集 主要思想