SBT protobuf grpc配置

时间:2016-04-27 07:58:17

标签: sbt protocol-buffers grpc

我是SBT的新手,我正在尝试将gradle protobuf / grpc配置转换为SBT。

我想知道scala社区是否在我之前做过这件事?

我已尝试过此插件https://github.com/sbt/sbt-protobuf,但它没有提供任何配置来启用grpc编译......

任何帮助表示感谢。

3 个答案:

答案 0 :(得分:3)

您可以使用ScalaPB为Scala生成gRPC存根。首先,将插件添加到project/plugins.sbt

addSbtPlugin("com.thesamet" % "sbt-protoc" % "0.99.1")
libraryDependencies += "com.trueaccord.scalapb" %% "compilerplugin" % "0.5.43"

然后,将其添加到您的build.sbt

libraryDependencies ++= Seq(
  "io.grpc" % "grpc-netty" % "1.0.1",
  "io.grpc" % "grpc-stub" % "1.0.1",
  "io.grpc" % "grpc-auth" % "1.0.1",
  "com.trueaccord.scalapb" %% "scalapb-runtime-grpc" % "0.5.43",
  "io.netty" % "netty-tcnative-boringssl-static" % "1.1.33.Fork19",  // SSL support
  "javassist" % "javassist" % "3.12.1.GA"  // Improves Netty performance
)

PB.targets in Compile := Seq(
  scalapb.gen(grpc = true, flatPackage = true) -> (sourceManaged in Compile).value
)

现在您可以将.proto文件放在src/main/protobuf中,它们将被ScalaPB接收。

我有example Scala gRPC project here。它显示了如何配置相互TLS身份验证,使用JSON Web令牌的用户会话,通过grpc-gateway的JSON网关,以及通过Helm部署到Kubernetes。

答案 1 :(得分:1)

我自己尝试从Gradle迁移到SBT时遇到了一些问题。

就像你说的那样,sbt-protobuf插件没有任何grpc特定设置,但它可能,这里有几个你应该仔细检查的设置:

  • 设置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"

  • 最后,与Eric Anderson一样,设置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,希望它有所帮助!

答案 2 :(得分:0)

我对sbt并不熟悉,但似乎sbt-protobuf本身不支持protoc插件或使用预建的protocprotoc-gen-grpc-java二进制文件。您需要手动传递necessary flags

像这样(未经测试):

protocOptions in PB.protobufConfig ++= Seq(
    "--plugin=protoc-gen-grpc-java=path/to/protoc-gen-grpc-java", "--grpc-java_out=path/to/output/folder")

您需要将"路径/更改为"部件适合您的系统。