protoc不生成服务存根文件

时间:2015-06-24 14:42:24

标签: protocol-buffers grpc protoc

我刚刚开始玩google proto。当我尝试编译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:examples

     

test / io / grpc / examples:helloworld

     

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

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

2 个答案:

答案 0 :(得分:24)

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

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

--plugin=protoc-gen-grpc-java=path/to/protoc-gen-grpc-java --grpc-java_out=path/to/output/dir

有关详细信息,请参阅gRPC compiler documentation

答案 1 :(得分:1)

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

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

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