gRPC不为服务生成接口,只为服务类生成接口

时间:2016-05-22 11:52:40

标签: java grpc protocol-buffers

我是gRPC的新手,遇到了这个问题:我用rpc服务定义创建了一个.proto。编译后我得到生成的源:所有消息都有一个实现接口的类。然而,服务本身并没有实现任何接口 - 它根本就没有生成。这就是我应该在我的服务器中实现的界面。我究竟做错了什么?我很确定gRPC文档没有说明这个问题。

我的.proto服务:

syntax = "proto3";
option java_multiple_files = true;
option java_package = "com.blah.my.rpc.api";
option java_outer_classname = "MyServiceProto";
option objc_class_prefix = "Pb";

package com.blah.my.rpc.api;

service MyService
{
  rpc connect(PbEmptyMessage) returns (PbParameterGroup){}

  rpc getParams(PbGenList) returns (PbParameterGroup){}

}

message PbEmptyMessage
{
}

message PbGenId
{
      string paramName = 1;
      string systemName = 2;
      string sName = 3;
      string sId = 4;
}

message PbParameterGroup
{
       bytes sParameters = 2;
       fixed64 time  = 3;
}

我在maven中的插件定义:

<extensions>
            <extension>
                <groupId>kr.motd.maven</groupId>
                <artifactId>os-maven-plugin</artifactId>
                <version>1.4.0.Final</version>
            </extension>
        </extensions>

        <plugins>
            <plugin>
                <groupId>org.xolstice.maven.plugins</groupId>
                <artifactId>protobuf-maven-plugin</artifactId>
                <version>0.5.0</version>
                <configuration>
                    <protocArtifact>com.google.protobuf:protoc:3.0.0-beta-2:exe:${os.detected.classifier}
                    </protocArtifact>
                    <pluginId>grpc-java</pluginId>
                    <pluginArtifact>io.grpc:protoc-gen-grpc-java:0.14.0:exe:${os.detected.classifier}</pluginArtifact>
                    <protoSourceRoot>${basedir}/src/main/resources</protoSourceRoot>
                    <outputDirectory>${basedir}/target/generated-sources</outputDirectory>
                </configuration>
                <executions>
                    <execution>
                        <phase>generate-sources</phase>
                        <goals>
                            <goal>compile</goal>
                            <goal>test-compile</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

2 个答案:

答案 0 :(得分:5)

从插件开发者那里得到答案。

第一件事:目标应该是:

编译 编译自定义

2d和主要的事情:在两个目标之间重复使用,因此其内容被重写。删除此参数解决了问题。

答案 1 :(得分:1)

有同样的问题,@ Alexandra的回答让我朝着正确的方向前进。

outputDirectory是需要删除的参数。 GRPC生成的代码位于不同的包中,但如果指定outputDirectory参数,则会覆盖所有内容。

我还发现我需要在maven文件中指定protoc的显式路径。也就是说,我在该构建系统上没有专家。

        <plugin>
            <groupId>org.xolstice.maven.plugins</groupId>
            <artifactId>protobuf-maven-plugin</artifactId>
            <version>0.5.1</version>
            <extensions>true</extensions>
            <configuration>
                <protocExecutable>/usr/local/bin/protoc</protocExecutable>
                <pluginId>grpc-java</pluginId>
            </configuration>

            <executions>
                <execution>
                    <goals>
                        <goal>compile</goal>
                        <goal>compile-custom</goal>
                        <goal>test-compile</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

使用上述内容似乎对我有用。