协议缓冲区-协议不生成服务存根文件



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

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

终端输出,

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

test/io:grpc

test/io/grpc:示例

test/io/grpc/examples:helloworld

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

有其他人面临过这个问题吗?

您显示的命令行未启用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编译器文档。

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

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

您还可以在protoc命令中添加--plugin=EXECUTABLE选项,以使用自定义code generator plugin生成更特定于每个系统的代码,而不是依赖于"抽象"服务。就像孙的建议。

最新更新