【问题标题】:Confusion with gRPC与 gRPC 混淆
【发布时间】:2019-05-21 17:05:33
【问题描述】:

平台:Windows 10 PC; Java:1.8.0_201; gRPC:1.21.x

我最近研究了 Google RPC (gRPC) 包,以尝试评估它以与 Java 一起使用。我已经阅读了网站 (grpc.io) 上提供的大量信息,并尝试下载/构建/安装它以进行测试评估。 我运气不太好。

有点不清楚(无论如何对我来说)使用 gRPC 究竟需要什么。似乎有许多活动部件,很难说出所有需要的东西。我知道它使用 Google Protobuf,所以我按照指示安装 Protobuf 编译器,protoc。我不确定除了编译器之外我是否还需要 Protobuf 的其他东西。我假设 gRPC 有一个“核心”,然后是一个特定于语言的模块(例如用于 Java),它实现了与 Java 程序交互所需的逻辑。不知道还有没有其他依赖。

由于我工作的安全策略,我无法克隆 git 存储库,但我下载了发行版(来自 https://github.com/grpc/grpc-java 的 v1.21.x)并将其解压缩到一个目录中。我按照指示构建示例客户端和服务器。由于缺少文件,该过程失败。以下是失败的摘录。

> Task :grpc-compiler:compileJava_pluginExecutableJava_pluginCpp
java_generator.h
C:\Users\jo24447\workspace\gRPC\grpc-java-1.21.x\compiler\src\java_plugin\cpp\java_generator.h(8): fatal error C1083: Cannot open include file: 'google/protobuf/io/zero_copy_stream.h': No such file or directory

java_plugin.cpp
c:\users\jo24447\workspace\grpc\grpc-java-1.21.x\compiler\src\java_plugin\cpp\java_generator.h(8): fatal error C1083: Cannot open include file: 'google/protobuf/io/zero_copy_stream.h': No such file or directory

java_generator.cpp
c:\users\jo24447\workspace\grpc\grpc-java-1.21.x\compiler\src\java_plugin\cpp\java_generator.h(8): fatal error C1083: Cannot open include file: 'google/protobuf/io/zero_copy_stream.h': No such file or directory

我加入了 gRPC 邮件列表并提交了一些问题来描述我遇到的问题。简短的回复表明我应该拉下最新版本(我拥有) - 我最初拉下了 master 分支,显然这是错误的做法。暗示它带有一个预构建的代码生成器插件(codegen)。我没有得到构建失败的原因。

还提供了构建 codegen 插件的说明链接。站点文档似乎表明我不需要构建代码生成器,除非我实际上正在更改代码,而我不是。无论如何,我查看了说明。看起来它是打算在 *nix 平台上完成的。在 Windows 平台上执行此操作的人应该做什么?

无论如何,我尝试使用新发行版进行构建,但由于同样的问题而失败。我回复了,但什么也没听到。

此时我被卡住了,不知道下一步该做什么。

任何关于以下内容的想法都会非常有帮助和赞赏:

  • 允许成功构建和 后续使用
  • 需要采取的步骤的明确指示 它从下载的发行版到功能齐全的应用程序/实用程序

【问题讨论】:

    标签: java grpc grpc-java


    【解决方案1】:

    我已经部分回复了我认为是mailing list thread you referenced

    grpc-java 是它自己的完整实现。它不是基于https://github.com/grpc/grpc 的“C 核心”。

    简而言之,你已经走出了老路;您不需要自己编译 grpc-java。我们已经在 Maven Central 上提供了二进制文件。

    当你下载 grpc-java 时,你应该下载的是 v1.12.0,它是发布标签,而不是 v1.12.x。已发布版本可在release section 轻松下载。

    git clone 不可用时,我们没有明确的指示,因为这种情况很少见,而且每个环境的答案都会有所不同。

    【讨论】:

    • 如果我解释正确,我不需要下载和使用 grpc-java 做任何事情。我应该能够在我的 pom.xml 中设置我的依赖项并完成它。对吗?
    • 是的,没错。 Maven/Gradle 将从 Maven Central 下载必要的组件。
    • 现在回想起来,我不知道我是怎么偏离轨道的。一旦我下载了正确的发行版(即github.com/grpc/grpc-java/releases/tag/v1.20.0) - v1.20.0 not v.1.20.x,一切都构建/安装正常。
    【解决方案2】:

    如果您想更改 gRPC-Java 或自己构建它,请参阅the instructions。 但您无需执行此操作即可使用它。


    要在 Maven / Gradle 项目中使用,只需添加必要的依赖项即可:

    Maven

    <dependency>
      <groupId>io.grpc</groupId>
      <artifactId>grpc-netty-shaded</artifactId>
      <version>1.20.0</version>
    </dependency>
    <dependency>
      <groupId>io.grpc</groupId>
      <artifactId>grpc-protobuf</artifactId>
      <version>1.20.0</version>
    </dependency>
    <dependency>
      <groupId>io.grpc</groupId>
      <artifactId>grpc-stub</artifactId>
      <version>1.20.0</version>
    </dependency>
    

    分级

    compile 'io.grpc:grpc-netty-shaded:1.20.0'
    compile 'io.grpc:grpc-protobuf:1.20.0'
    compile 'io.grpc:grpc-stub:1.20.0'
    

    对于基于 protobuf 的代码生成,您可以使用与构建系统集成的插件:

    protobuf-maven-plugin

    <build>
      <extensions>
        <extension>
          <groupId>kr.motd.maven</groupId>
          <artifactId>os-maven-plugin</artifactId>
          <version>1.5.0.Final</version>
        </extension>
      </extensions>
      <plugins>
        <plugin>
          <groupId>org.xolstice.maven.plugins</groupId>
          <artifactId>protobuf-maven-plugin</artifactId>
          <version>0.5.1</version>
          <configuration>
            <protocArtifact>com.google.protobuf:protoc:3.7.1:exe:${os.detected.classifier}</protocArtifact>
            <pluginId>grpc-java</pluginId>
            <pluginArtifact>io.grpc:protoc-gen-grpc-java:1.20.0:exe:${os.detected.classifier}</pluginArtifact>
          </configuration>
          <executions>
            <execution>
              <goals>
                <goal>compile</goal>
                <goal>compile-custom</goal>
              </goals>
            </execution>
          </executions>
        </plugin>
      </plugins>
    </build>
    

    protobuf-gradle-plugin

    apply plugin: 'com.google.protobuf'
    
    buildscript {
      repositories {
        mavenCentral()
      }
      dependencies {
        classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.8'
      }
    }
    
    protobuf {
      protoc {
        artifact = "com.google.protobuf:protoc:3.7.1"
      }
      plugins {
        grpc {
          artifact = 'io.grpc:protoc-gen-grpc-java:1.20.0'
        }
      }
      generateProtoTasks {
        all()*.plugins {
          grpc {}
        }
      }
    }
    

    您可以在the README找到更多详细信息。

    【讨论】:

      猜你喜欢
      • 2014-07-09
      • 1970-01-01
      • 2016-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多