【问题标题】:I can't generate the gRPC stubs classes我无法生成 gRPC 存根类
【发布时间】:2021-04-01 14:22:58
【问题描述】:

我设法通过 .proto 文件生成了类,但它们在构建中。

我希望在 main 中生成类,因为当我要扩展存根时,无法实现这些方法。

看:

文件.proto:

syntax = "proto3";

package demogrpcserver.tcp;

option java_multiple_files = true;
option java_package = "com.example.demogrpcserver";
option java_outer_classname = "tcp";

service TCPService {
  rpc execute(TCPMonitorRequest) returns (TCPMonitorResponse);
}

message TCPMonitorRequest {
  string socketOpen = 1;
  string messageType = 2;
}

message TCPMonitorResponse {
  bool success = 1;
  string txId = 2;
}

.proto 文件位于主文件夹中。

有人知道怎么解决吗?

【问题讨论】:

    标签: java spring-boot grpc


    【解决方案1】:

    您可以使用 protoc 工具在任何地方生成您的 Java 类

    protoc \
      -I PATH_TO_YOUR_PROTOS \
      --java_out=PATH_TO_JAVA_LOCALTION \
      PROTO_FILE_NAME_THAT_WILL_BE_IN_$PATH_TO_YOUR_PROTOS
    
    protoc \
      -I $PATH_TO_YOUR_PROTOS \
      --java_out=$PATH_TO_JAVA_LOCALTION \
      --plugin=protoc-gen-grpc-java=/usr/local/bin/protoc-gen-grpc-java \
      PROTO_FILE_NAME_THAT_WILL_BE_IN_$PATH_TO_YOUR_PROTOS
    

    安装 protoc 和 protoc-grpc-java 插件

    PROTOC_VERSION="3.12.0"
    JAVA_GEN_VERSION="3.7.1"
    JAVA_GRPC_GEN_VERSION="1.24.0"
    
    
    ## Protobuf compiler
    RUN apt-get update && \
            apt-get install -y unzip && \
            wget https://github.com/protocolbuffers/protobuf/releases/download/v$PROTOC_VERSION/protoc-$PROTOC_VERSION-linux-x86_64.zip && \
            unzip protoc-$PROTOC_VERSION-linux-x86_64.zip -d /usr/local/ && \
            rm -rf protoc-$PROTOC_VERSION-linux-x86_64.zip
    
    # Protobuf Java
    RUN curl https://repo1.maven.org/maven2/io/grpc/protoc-gen-grpc-java/1.27.2/protoc-gen-grpc-java-1.27.2-linux-x86_64.exe -o  /usr/local/bin/protoc-gen-grpc-java && \
        chmod +x /usr/local/bin/protoc-gen-grpc-java
    

    您可以找到更多信息here

    【讨论】:

      【解决方案2】:

      您可以使用 pom 文件中的插件在 src 路径中自动生成 proto 文件。

      <plugin>
                  <groupId>com.github.os72</groupId>
                  <artifactId>protoc-jar-maven-plugin</artifactId>
                  <version>3.6.0.1</version>
                  <executions>
                      <execution>
                          <phase>generate-sources</phase>
                          <goals>
                              <goal>run</goal>
                          </goals>
                          <configuration>
                              <includeMavenTypes>direct</includeMavenTypes>
      
                              <inputDirectories>
                                  <include>src/main/resources</include>
                              </inputDirectories>
      
                              <outputTargets>
                                  <outputTarget>
                                      <type>java</type>   <outputDirectory>src/proto/</outputDirectory>
                                  </outputTarget>
                                  <outputTarget>
                                      <type>grpc-java</type>
                                      <pluginArtifact>io.grpc:protoc-gen-grpc-java:1.15.0</pluginArtifact>
                                  <outputDirectory>src/proto/</outputDirectory>
                                  </outputTarget>
                              </outputTargets>
                          </configuration>
                      </execution>
                  </executions>
              </plugin>
      

      在您当前的设置下,您可以导入您的原型文件并对其进行扩展。

      【讨论】:

      • 不错。要 Gradle 吗?
      • 实现组:'com.github.os72',名称:'protoc-jar-maven-plugin',版本:'3.11.4'
      • 我的应用程序配置了 gradle。你知道我如何在 gradle 中应用这个设置吗?
      • 希望对您有所帮助medium.com/@DivyaJaisawal/…
      • @devr,我为 Gradle 找到了一个 github.com/grpc/grpc-java
      【解决方案3】:

      请参阅 gRPC Java 自述文件的Generated Code section。对于非 Android Gradle 构建,您可以使用:

      plugins {
          id 'com.google.protobuf' version '0.8.15'
      }
      
      protobuf {
        protoc {
          artifact = "com.google.protobuf:protoc:3.12.0"
        }
        plugins {
          grpc {
            artifact = 'io.grpc:protoc-gen-grpc-java:1.36.0'
          }
        }
        generateProtoTasks {
          all()*.plugins {
            grpc {}
          }
        }
      }
      

      你也可以看看grpc-java examples

      【讨论】:

        猜你喜欢
        • 2021-02-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-08
        • 1970-01-01
        • 2016-09-27
        • 1970-01-01
        相关资源
        最近更新 更多