SBT protobuf grpc 配置
SBT protobuf grpc configuration
我是 SBT 的新手,我正在尝试将 gradle protobuf/grpc 配置转换为 SBT。
我想知道 scala 社区是否在我之前这样做过?
我试过这个插件https://github.com/sbt/sbt-protobuf,但是它没有提供任何启用grpc编译的配置...
感谢任何帮助。
我不熟悉 sbt,但似乎 sbt-protobuf 本身不支持 protoc 插件或手动使用预构建 protoc or protoc-gen-grpc-java binaries. You will need to pass the 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")
您需要更改 "path/to" 部分以适应您的系统。
我自己在尝试从 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所说,设置grpc-java
使用的protoc
的额外选项。第一个选项设置 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,希望对你有帮助!
您可以使用 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. It shows how to configure mutual TLS authentication, user sessions using JSON Web Tokens, a JSON gateway via grpc-gateway, and deployment to Kubernetes via Helm。
我是 SBT 的新手,我正在尝试将 gradle protobuf/grpc 配置转换为 SBT。
我想知道 scala 社区是否在我之前这样做过?
我试过这个插件https://github.com/sbt/sbt-protobuf,但是它没有提供任何启用grpc编译的配置...
感谢任何帮助。
我不熟悉 sbt,但似乎 sbt-protobuf 本身不支持 protoc 插件或手动使用预构建 protoc or protoc-gen-grpc-java binaries. You will need to pass the 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")
您需要更改 "path/to" 部分以适应您的系统。
我自己在尝试从 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所说,设置
相同grpc-java
使用的protoc
的额外选项。第一个选项设置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,希望对你有帮助!
您可以使用 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. It shows how to configure mutual TLS authentication, user sessions using JSON Web Tokens, a JSON gateway via grpc-gateway, and deployment to Kubernetes via Helm。