构建和 ​​运行 grpc-java 没有 gradle 的例子

Build and run grpc-java examples without gradle

我正在尝试使 grpc-java 中的示例起作用。 如果我使用 gradle 确实很容易,但是,我将 grpc 集成到使用另一个构建系统的项目中。 我想知道如何仅使用 protoc、javac 和 java 来编译和 运行 示例。 我能够从 .proto 来源生成 java 来源,但没有运气编译生成的 java 来源。

我尝试了 1000 种组合(不同的类路径),但没有任何效果。

> javac RouteGuideGrpc.java

< RouteGuideGrpc.java:3: error: package io.grpc.stub does not exist
import static io.grpc.stub.ClientCalls.asyncUnaryCall;

(省略其他99个编译错误)

谁能展示一系列可行的命令? 谢谢。

更新:我在 Linux 上做这个。

Upd:我正在使用 SBT,但这并不重要。我真正想了解的是如何使用 javac 来编译生成的 grpc 代码。 我确定我在类路径中有 grpc-core、grpc-netty、grpc-protobuf 和 grpc-stub(实际上,此时还不确定...)。

io.grpc.stub 是 grpc-stub 工件的一部分。要构建代码生成的组件,您的类路径中至少需要 protobuf-javagrpc-stubgrpc-protobufgrpc-core。根据您的编译方式,您可能还需要生成任何 protobuf 类(grpc 生成的存根取决于 protobuf 生成的原型)。

compiler directory 中手动提供了 运行 代码生成器的文档,但它不包括 运行 javac.

如果您仍然遇到问题,请仔细检查 protoc 编译器和 protobuf-java 是否具有相同的版本,并且 protoc-gen-grpc-java 和 grpc JAR 是否具有相同的版本版本。

好的,我能够解决编译时问题。

我最终将 println 语句插入到 grpc 附带的 build.gradle 文件中,以查看编译这些示例时使用的实际 class 路径。

事实证明 grpc 库的版本是 0.9.0,而在我的 sbt 构建中我指的是 0.7.2。

就在今天,0.8.0 版的库被放入了 Maven 存储库,当我将版本从 0.7.2 更改为 0.8.0 时,一切都按预期工作。

实际上,我自己在尝试从 Gradle 迁移到 SBT 时遇到了一些问题。

首先你应该利用 sbt-protobuf 插件为你编译 .proto 文件。确保:

  • 设置 路径版本 protoc:

version in PB.protobufConfig := "3.0.0"
protoc in PB.protobufConfig := PATH_PROTOC
  • 如果需要,设置 .proto 文件的位置(默认为 src/main/protobuf):

sourceDirectory in PB.protobufConfig := baseDirectory.value / "src" / "main" / "proto"
  • 最后,设置protoc的额外选项供grpc-java使用。第一个选项设置 protoc-gen-grpc-java 插件箱的路径;第二个将 grpc-java 的输出路径设置为与 sbt-protobuf:
  • 相同

protocOptions in PB.protobufConfig ++= Seq(
    "--plugin=protoc-gen-grpc-java=" + PATH_GRPC_JAVA_PLUGIN,
    "--grpc-java_out=" + baseDirectory.value + "/target/src_managed/main/compiled_protobuf")

我最终建立了一个存储库,其中包含所有这些内容。 Here it is,希望对您有所帮助!