私は SBT が初めてで、gradle protobuf/grpc 構成を SBT に変換しようとしています。
scala コミュニティが私より前にこれを行っていたのだろうか?
このプラグインhttps://github.com/sbt/sbt-protobufを試しましたが、grpc コンパイルを有効にするための構成は提供されません...
どんな助けでも感謝します。
私は SBT が初めてで、gradle protobuf/grpc 構成を SBT に変換しようとしています。
scala コミュニティが私より前にこれを行っていたのだろうか?
このプラグインhttps://github.com/sbt/sbt-protobufを試しましたが、grpc コンパイルを有効にするための構成は提供されません...
どんな助けでも感謝します。
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 へのデプロイを構成する方法を示します。
実際、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 Andersonprotoc
が言ったように、 used 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")
私は、これらすべてを整理したリポジトリを配置することになりました。ここにあります。お役に立てば幸いです。
私は sbt に詳しくありませんが、sbt-protobuf は protoc プラグインをネイティブにサポートしていないか、ビルド済みのprotocまたはprotoc-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")
システムに合わせて「パス/へ」の部分を変更する必要があります。