有沒有人有一個簡單的 zio-grpc 服務器,專案中也有 codegen,使用 Scala 3?
我從他們的 repo 開始使用 HelloWorld 專案,并嘗試使用 scalaVersion := "3.1.0" 構建它
這是 plugins.sbt 中的相關部分:
libraryDependencies = Seq(
"com.thesamet.scalapb.zio-grpc" % "zio-grpc-codegen_2.13" % zioGrpcVersion,
"com.thesamet.scalapb" % "compilerplugin_2.13" % "0.11.1"
)
excludeDependencies = Seq(
ExclusionRule("org.scala-lang.modules", "scala-collection-compat_2.12"),
ExclusionRule("com.thesamet.scalapb", "protoc-bridge_2.12")
)
在 build.sbt 中:
libraryDependencies = Seq(
"io.grpc" % "grpc-netty" % grpcVersion,
"com.thesamet.scalapb" % "scalapb-runtime-grpc_2.13" % scalapb.compiler.Version.scalapbVersion
)
excludeDependencies = Seq(
ExclusionRule("org.scala-lang.modules", "scala-collection-compat_2.12"),
ExclusionRule("com.thesamet.scalapb", "protoc-bridge_2.12")
)
由于 Scala 3 可以使用 2.13 庫,這就是我正在做的。(三個與 zio-grpc 相關的庫中,一個是 zio-grpc-codegen,沒有 Scala 3 版本,因此至少必須使用 2.13。)
我從具有上述版本的 sbt 收到此錯誤:
java.lang.NoSuchMethodError: scala.package$.Seq()Lscala/collection/immutable/Seq$; 在 protocbridge.gens$.java(gens.scala:17) 在 protocbridge.gens$.(gens.scala:11)
如果我洗掉任何一個 scala-collection-compat 排除項,我們會得到
[錯誤] 使用 ProjectRef(uri("file:/Users/xxx/dev/zio-grpc/examples/helloworld/project/"), "helloworld-build") 中沖突的跨版本后綴解決了模塊:[錯誤] com.thesamet.scalapb:protoc-bridge _2.12, _2.13 [錯誤] com.thesamet.scalapb:compilerplugin _3, _2.13
簡而言之,我找不到 Scala 2.13/3 版本的 zio-grpc-codegen、compilerplugin_3 和 scalapb-runtime-grpc 的任何排列,它們不會給出一些 sbt 沖突的跨版本后綴錯誤。
uj5u.com熱心網友回復:
TL;DR:這是不可能的,因為您使用的某些代碼依賴于宏并且尚未針對 Scala3 發布。
無論您的專案中使用哪個 Scala 版本,SBT 插件都與 Scala 2.12 一起運行,因此您不必嘗試使用帶有_2.13或_3后綴的插件,只需使用實際選擇_2.12工件的常規語法即可。
也就是說,在plugins.sbt中:
libraryDependencies = Seq(
"com.thesamet.scalapb.zio-grpc" %% "zio-grpc-codegen" % zioGrpcVersion,
"com.thesamet.scalapb" %% "compilerplugin" % "0.11.8"
)
(不需要任何排除)。
您可以通過查看 sbt 日志來確認這一點,您應該會看到它下載了 Scala 2.12 版的插件:
...
https://somerepository.com/com/thesamet/scalapb/zio-grpc/zio-grpc-codegen_2.12/0.5.1/zio-grpc-codegen_2.12-0.5.1.pom
https://somerepository.com/com/thesamet/scalapb/compilerplugin_2.12/0.11.8/compilerplugin_2.12-0.11.8.pom
...
一旦你這樣做,你會得到一個錯誤,因為以下依賴項不存在:
com.thesamet.scalapb:scalapb-runtime_3:0.11.1com.thesamet.scalapb:scalapb-runtime-grpc_3:0.11.1com.thesamet.scalapb.zio-grpc:zio-grpc-core_3:0.5.0
對于第一個和第二個,您只需像我在上面所做的那樣更新compilerplugin版本(該版本用于主要依賴項)。0.11.8compilerpluginscalapb-runtime-grpc
對于第 3 次,不幸的是,它還沒有為 Scala 3 發布。一種嘗試是在build.sbt_2.13中使用類似的東西來強制這個版本的版本:
libraryDependencies = ("com.thesamet.scalapb.zio-grpc" %% "zio-grpc-core" % "0.5.1") cross CrossVersion.for3Use2_13
excludeDependencies = "com.thesamet.scalapb.zio-grpc" % "zio-grpc-core_3"
但這不會與一些與宏相關的錯誤編譯,這是 Scala 2.13 和 3 之間不兼容的東西。你無法解決這個問題。
請記住,您可以在 Maven 中心檢查 Scala 版本的可用庫版本:
- https://mvnrepository.com/artifact/com.thesamet.scalapb/compilerplugin
- https://mvnrepository.com/artifact/com.thesamet.scalapb.zio-grpc/zio-grpc-core
uj5u.com熱心網友回復:
我還沒有為 Scala 3 發布 zio-grpc,因為一些相關的測驗Has失敗并且很難修復。同時 ZIO 2 即將問世并被棄用Has。即將推出支持 ZIO 2 和 Scala 3 的 zio-grpc 版本。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/412161.html
標籤:
