protoc不生成服务存根文件

Ram*_*hla 22 protocol-buffers grpc protoc

我刚开始玩谷歌原型.当我尝试编译proto-java示例中存在的proto文件时,它不会生成任何grpc文件.

proto文件, https://github.com/grpc/grpc-java/blob/master/examples/src/main/proto/hello_world.proto

终端输出,

rsonkhla @ raman-OptiPlex-9020:〜/ sandbox/grpc-java/examples $ protoc --version 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 test/test /:io

test/io:grpc

test/io/grpc:示例

test/io/grpc/examples:helloworld

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

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

Eri*_*son 25

您显示的命令行未启用grpc插件.您需要为grpc插件指定一个_out参数,该参数启用插件并指定它应该输出文件的位置.由于插件可能不在你的插件中PATH,你还需要告诉protoc如何找到插件--plugin.

所以你需要添加两个参数:

--plugin=protoc-gen-grpc-java=path/to/protoc-gen-grpc-java --grpc-java_out=path/to/output/dir
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅gRPC 编译器文档.

  • path/to/protoc-gen-grpc-java是二进制文件(例如,Linux的本机ELF二进制文件).它不是JAR.您可以在http://search.maven.org/#search%7Cga%7C1%7Cg%3A%22io.grpc%22%20a%3A%22protoc-gen-grpc-java%22找到预建版本(例如,linux-x86_32.exe,可以像`--plugin = protoc-gen-grpc-java = path/to/linux-x86_32.exe`一样使用 (4认同)

djz*_*zhu 16

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

option cc_generic_services = true;
option java_generic_services = true;
option py_generic_services = true;
Run Code Online (Sandbox Code Playgroud)

您还--plugin=EXECUTABLE可以在protoccmd 中添加选项以使用自定义code generator plugin来生成更特定于每个系统的代码,而不是依赖于“抽象”服务。就像埃里克的建议一样。