Java 与gRPC的混淆
平台:windows10pc; Java:1.8.0_201; gRPC:1.21.x 我最近研究了GoogleRPC(gRPC)包,试图对其进行评估,以便与Java一起使用。我已经阅读了网站(grpc.io)上的大量可用信息,并尝试下载/构建/安装它以进行测试评估我运气不太好。 使用gRPC到底需要什么(对我来说)有点不清楚。似乎有许多活动部件,很难说出所需的一切。我知道它使用Google Protobuf,所以我按照说明安装Protobuf编译器,Java 与gRPC的混淆,java,grpc,grpc-java,Java,Grpc,Grpc Java,平台:windows10pc; Java:1.8.0_201; gRPC:1.21.x 我最近研究了GoogleRPC(gRPC)包,试图对其进行评估,以便与Java一起使用。我已经阅读了网站(grpc.io)上的大量可用信息,并尝试下载/构建/安装它以进行测试评估我运气不太好。 使用gRPC到底需要什么(对我来说)有点不清楚。似乎有许多活动部件,很难说出所需的一切。我知道它使用Google Protobuf,所以我按照说明安装Protobuf编译器,protoc。除了编译器,我不确定Proto
protoc
。除了编译器,我不确定Protobuf是否还需要其他东西。我假设gRPC有一个“核心”,然后是一个特定于语言的模块(例如Java),它实现了与Java程序接口所需的逻辑。我不知道是否还有其他依赖项
由于我工作的安全策略,我无法克隆git repo,但我下载了发行版(v1.21.x from)并将其解压缩到一个目录中。我按照说明构建了示例客户机和服务器。由于缺少文件,进程失败。下面是失败的摘录
> 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邮件列表,并提交了一些描述我所面临问题的问题。简短的回复表明我应该删除最新版本(我已经删除了)-我最初删除了主分支,显然这是错误的。这意味着它附带了一个预构建的代码生成器插件(codegen)。我没有得到构建失败的原因
还提供了一个链接,指向构建codegen插件的说明。站点文档似乎表明我不需要构建codegen,除非我确实在更改代码,而我不是。不管怎样,我看了说明书。这似乎是为了在*nix平台上完成。在Windows平台上执行此操作的人应该做什么
在任何情况下,我尝试用新发行版进行构建,但失败的原因是同样的问题。我回应了,什么也没听到
在这一点上,我被卡住了,不知道下一步该怎么办
关于以下内容的任何想法都将非常有帮助,我们将不胜感激:
- 允许成功构建所需的最低分发版本,以及 后续使用
- 关于需要采取的步骤的明确指示 从下载的发行版下载到功能齐全的应用程序/实用程序
当git clone不可用时,我们没有明确的说明,因为这种情况很少见,而且每个环境的答案都会有所不同。我已经在我假设的问题中做出了部分回应 GRPCJava是它自己的完整实现。它不是基于“C核心”的 简而言之,你已经走出了老路;您不需要自己编译GRPCJava。我们已经在Maven Central上提供了二进制文件 当您下载GRPCJava时,您应该下载v1.12.0,它是发行标签,而不是v1.12.x。发布的版本可以在中轻松下载
当无法使用
git clone
时,我们没有明确的说明,因为这很少见,而且每个环境的答案都会有所不同。如果您想更改gRPC Java或自己构建它,请参阅。
但是你不需要这样做来使用它
要在Maven/Gradle项目中使用,只需添加必要的依赖项: 马文
对于基于protobuf的codegen,您可以使用与构建系统集成的插件:
如果您想对gRPC Java进行更改或自己构建,请参见。。 但是你不需要这样做来使用它
要在Maven/Gradle项目中使用,只需添加必要的依赖项: 马文
对于基于protobuf的codegen,您可以使用与构建系统集成的插件:
您可以在中找到更多详细信息。如果我解释正确,我不需要下载grpc java,也不需要使用grpc java执行任何操作。我应该能够在pom.xml中设置依赖项并完成它。对吗?对,对。Maven/Gradle将从Maven Central下载必要的组件。现在回想起来,我不知道我是如何偏离轨道的。一旦我下载了正确的发行版(即v1.20.0而不是v.1.20.x),所有的构建/安装都很好。如果我解释正确,我就不需要下载grpc java,也不需要使用grpc java做任何事情。我应该能够在pom.xml中设置依赖项并完成它。对吗?对,对。Maven/Gradle将从Maven Central下载必要的组件。现在回想起来,我不知道我是如何偏离轨道的。一旦我下载了正确的发行版(即v1.20.0而不是v.1.20.x),构建/安装的一切都很好。
<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'
<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 {}
}
}
}