我是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>
答案 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>
使用上述内容似乎对我有用。