在没有gradle的情况下构建并运行grpc-java示例

时间:2015-08-12 13:48:59

标签: java grpc

我正在尝试从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个其他编译错误)

有人能展示一系列有用的命令吗? 谢谢。

Upd:我在Linux上这样做。

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

3 个答案:

答案 0 :(得分:1)

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

有关于compiler directory手动运行代码生成器的文档,但它不包括运行javac

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

答案 1 :(得分:1)

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

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

原来,grpc libs的版本是0.9.0,而在我的sbt版本中,我指的是0.7.2。

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

答案 2 :(得分: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"
  • 最后,设置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,希望它有所帮助!