与 gRPC 混淆
Confusion with gRPC
平台:Windows 10 台电脑;
Java: 1.8.0_201;
gRPC: 1.21.x
我最近研究了 Google RPC (gRPC) 包,试图评估它与 Java 一起使用。我已通读网站 (grpc.io) 上的大量可用信息,并已尝试 download/build/install 对其进行测试评估。 我运气不太好。
有点不清楚(无论如何对我来说)使用 gRPC 究竟需要什么。似乎有许多活动部件,很难说出所需的一切。我知道它使用 Google Protobuf,所以我按照说明安装了 Protobuf 编译器 protoc
。我不确定除了编译器之外我是否还需要 Protobuf 的其他东西。我假设有一个 "core" 到 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)。我没有得到构建失败的原因。
link 还提供了构建代码生成插件的说明。站点文档似乎表明我不需要构建代码生成器,除非我实际上正在更改代码,而我不是。不管我看了说明书。看起来这是为了在 *nix 平台上完成。在 Windows 平台上做这件事的人应该做什么?
无论如何,我尝试使用新发行版进行构建,但由于同样的问题而失败。我回复了,但什么也没听到。
此时我卡住了,不知道下一步该做什么。
关于以下内容的任何想法都会非常有帮助和赞赏:
- 允许成功构建所需的最低发行版和
后续使用
- 关于需要采取的步骤的明确指示
它从下载的发行版到功能齐全的 application/utility
我已经部分回应了我假设的 mailing list thread you referenced。
grpc-java 是它自己的完整实现。它不是基于 https://github.com/grpc/grpc 处的 "C core"。
总之,你已经走出了人迹罕至的道路;您不需要自己编译 grpc-java。我们已经在 Maven Central 上提供了二进制文件。
当您下载 grpc-java 时,您应该已经下载了 v1.12.0,它是发布标签,而不是 v1.12.x。已发布的版本很容易在 release section.
下载
当 git clone
不可用时,我们没有明确的说明,因为这种情况很少见,而且答案会因环境而异。
如果您想更改 gRPC-Java 或自己构建它,请参阅 the instructions。
但是您不需要这样做就可以使用它。
要在Maven/Gradle项目中使用,只需添加必要的依赖:
行家
<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>
Gradle
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-based codegen,您可以使用与构建系统集成的插件:
<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>
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 中找到更多详细信息。
平台:Windows 10 台电脑; Java: 1.8.0_201; gRPC: 1.21.x
我最近研究了 Google RPC (gRPC) 包,试图评估它与 Java 一起使用。我已通读网站 (grpc.io) 上的大量可用信息,并已尝试 download/build/install 对其进行测试评估。 我运气不太好。
有点不清楚(无论如何对我来说)使用 gRPC 究竟需要什么。似乎有许多活动部件,很难说出所需的一切。我知道它使用 Google Protobuf,所以我按照说明安装了 Protobuf 编译器 protoc
。我不确定除了编译器之外我是否还需要 Protobuf 的其他东西。我假设有一个 "core" 到 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)。我没有得到构建失败的原因。
link 还提供了构建代码生成插件的说明。站点文档似乎表明我不需要构建代码生成器,除非我实际上正在更改代码,而我不是。不管我看了说明书。看起来这是为了在 *nix 平台上完成。在 Windows 平台上做这件事的人应该做什么?
无论如何,我尝试使用新发行版进行构建,但由于同样的问题而失败。我回复了,但什么也没听到。
此时我卡住了,不知道下一步该做什么。
关于以下内容的任何想法都会非常有帮助和赞赏:
- 允许成功构建所需的最低发行版和 后续使用
- 关于需要采取的步骤的明确指示 它从下载的发行版到功能齐全的 application/utility
我已经部分回应了我假设的 mailing list thread you referenced。
grpc-java 是它自己的完整实现。它不是基于 https://github.com/grpc/grpc 处的 "C core"。
总之,你已经走出了人迹罕至的道路;您不需要自己编译 grpc-java。我们已经在 Maven Central 上提供了二进制文件。
当您下载 grpc-java 时,您应该已经下载了 v1.12.0,它是发布标签,而不是 v1.12.x。已发布的版本很容易在 release section.
下载当 git clone
不可用时,我们没有明确的说明,因为这种情况很少见,而且答案会因环境而异。
如果您想更改 gRPC-Java 或自己构建它,请参阅 the instructions。 但是您不需要这样做就可以使用它。
要在Maven/Gradle项目中使用,只需添加必要的依赖:
行家
<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>
Gradle
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-based codegen,您可以使用与构建系统集成的插件:
<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>
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 中找到更多详细信息。