0

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

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

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

任何帮助表示赞赏。

4

3 回答 3

4

您可以使用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 拾取。

我在这里有一个示例 Scala gRPC 项目。它展示了如何配置双向 TLS 身份验证、使用 JSON Web 令牌的用户会话、通过grpc-gateway的 JSON 网关以及通过Helm部署到 Kubernetes 。

于 2016-10-31T14:35:22.137 回答
2

实际上,我自己在尝试从 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所说,设置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-10-02T10:55:02.117 回答
0

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

像这样的东西(未经测试):

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

您需要更改“路径/到”部分以适合您的系统。

于 2016-04-27T21:40:25.650 回答