3

我正在尝试从 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(实际上,目前还不确定...)。

4

3 回答 3

1

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

编译器目录中有手动运行代码生成器的文档,但不包括运行javac

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

于 2015-08-12T14:36:14.123 回答
1

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

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

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

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

于 2015-08-14T12:00:36.530 回答
1

实际上,我自己在尝试从 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"
  • 最后,设置protocused by 的额外选项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")

我最终放置了一个存储库,所有这些都整理好了。就在这里,希望对你有帮助!

于 2016-09-30T16:12:16.183 回答