Protocol buffers protoc不生成服务存根文件

Protocol buffers protoc不生成服务存根文件,protocol-buffers,grpc,protoc,Protocol Buffers,Grpc,Protoc,我刚刚开始玩google proto。当我试图编译proto java示例中的proto文件时,它不会生成任何grpc文件 原始文件, 终端输出 rsonkhla@raman-OptiPlex-9020:~/sandbox/grpc java/examples$protoc --libprotoc 3.0.0版rsonkhla@raman-OptiPlex-9020:~/sandbox/grpc java/examples$protoc --java_out=test/-I.././grpc

我刚刚开始玩google proto。当我试图编译proto java示例中的proto文件时,它不会生成任何grpc文件

原始文件,

终端输出


rsonkhla@raman-OptiPlex-9020:~/sandbox/grpc java/examples$protoc
--libprotoc 3.0.0版rsonkhla@raman-OptiPlex-9020:~/sandbox/grpc java/examples$protoc --java_out=test/-I.././grpc java/examples.././grpc java/examples/src/main/proto/hello_world.proto
rsonkhla@raman-OptiPlex-9020:~/sandbox/grpc java/examples$ls-R测试/ 测试/:io

测试/输入输出:grpc

测试/io/grpc:示例

测试/io/grpc/示例:helloworld

test/io/grpc/examples/helloworld:HelloRequest.java
HelloResponse.java HelloWorldProto.java HelloRequestOrBuilder.java helloreresponseorbuilder.java


还有其他人遇到过这个问题吗?

您显示的命令行没有启用grpc插件。您需要为grpc插件指定一个_out参数,该参数启用插件并指定其输出文件的位置。由于插件可能不在您的
路径中
,因此您还需要告诉protoc如何使用
--plugin
查找插件

因此,您需要添加两个参数:

--plugin=protoc-gen-grpc-java=path/to/protoc-gen-grpc-java --grpc-java_out=path/to/output/dir
有关更多信息,请参阅gRPC。

您可以将这些添加到.proto(基于您的语言)以生成抽象服务:

option cc_generic_services = true;
option java_generic_services = true;
option py_generic_services = true;

您还可以在
协议
cmd中添加
--plugin=EXECUTABLE
选项,以使用自定义
代码生成器插件
生成更特定于每个系统的代码,而不是依赖“抽象”服务。就像Eric的建议一样。

请忽略。编译时我没有通过protoc gen grpc java插件路径。。。rsonkhla@raman-OptiPlex-9020:~/sandbox/grpc-java/examples$protoc--plugin=protoc-gen-java\u-rpc=../compiler/build/binaries/java\u-pluginExecutable/protoc-gen-grpc-java--java\u-rpc\u-out=test/-I.src/main/proto/hello\u-world.prototest/io/grpc/examples/helloworld:GreeterGrpc.java HelloRequest.java HelloRequestOrBuilder.java helloreresponse.java helloreresponseorbuilder.java HelloWorldProto.javaI使用protobuf maven插件,它也不能生成服务存根文件。嗨,Eric,我正在努力让这项工作,我已经从maven下载了protoc-gen-grpc-java.jar,但不管我如何将它输入到那个参数中,它仍然会告诉我“文件未找到或不可执行”,也许我应该有一些其他工件来代替jar文件?您的“path/to/protoc-gen-grpc-java”是指向jar文件还是其他什么?path/to/protoc-gen-grpc-java是一个二进制文件(例如,Linux的本机ELF二进制文件)。它不是一个JAR。您可以在(例如,Linux-x86_32.exe,它可以像
--plugin=protoc gen grpc java=path/to/Linux-x86_32.exe
)上找到预编译版本。谢谢我已经从github项目编译了它,尽管它生成的代码无效(grpc-all.jar缺少生成的一个中使用的一些代码)所以我刚刚创建了一个gradle迷你项目,它只负责protobuf部分…我希望我们将来会有sbt的官方支持…@Eric Anderson Thans,这就是我要找的。但是,带有.exe后缀的ELF二进制,听起来真的很奇怪;)当我第一次找到它时,我不相信它是我真正需要的。。。