【问题标题】:SBT protobuf grpc configurationSBT protobuf grpc 配置
【发布时间】:2016-04-27 07:58:17
【问题描述】:

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

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

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

任何帮助表示赞赏。

【问题讨论】:

    标签: sbt protocol-buffers grpc


    【解决方案1】:

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

    【讨论】:

      【解决方案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说的那样,设置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,希望对你有帮助!

      【讨论】:

      • 感谢分享,我只是将 protobuf 生成隔离到一个单独的 gralde 迷你项目中。老实说 sbt 是垃圾,我会不惜一切代价避免使用它......遗憾的是我们有游戏框架......
      【解决方案3】:

      我不熟悉 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")
      

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

      【讨论】:

        猜你喜欢
        • 2018-06-28
        • 2021-05-07
        • 1970-01-01
        • 2023-03-10
        • 2021-01-30
        • 1970-01-01
        • 2012-11-28
        • 1970-01-01
        • 2019-12-13
        相关资源
        最近更新 更多