是否有任何在 Scala 3 程序中使用 Sangria 的示例,或者这是不可能的?在 SBT 中使用交叉编译可以正常构建,但是当我发送查询时,在
NoSuchMethodError
中出现 Executor.execute
异常。
build.sbt
看起来像这样:
val AkkaVersion = "2.6.21"
val SangriaAkkaHttpVersion = "0.0.4"
crossScalaVersions := Seq("2.13.5", "3.3.0")
ThisBuild / scalaVersion := "3.3.0"
("com.typesafe.akka" %% "akka-actor-typed" % AkkaVersion).cross(CrossVersion.for3Use2_13),
("com.typesafe.akka" %% "akka-stream-typed" % AkkaVersion).cross(CrossVersion.for3Use2_13),
("org.sangria-graphql" %% "sangria-akka-http-circe" % SangriaAkkaHttpVersion).cross(CrossVersion.for3Use2_13),
关于如何让它发挥作用有任何线索吗?
错误信息:
java.lang.NoSuchMethodError: 'scala.runtime.BoxedUnit sangria.execution.Executor$.execute$default$4()'
at XXX.graphql.GraphQlServer$$anon$1.applyOrElse(GraphQlServer.scala:55)
at XXX.graphql.GraphQlServer$$anon$1.applyOrElse(GraphQlServer.scala:49)
at scala.runtime.AbstractPartialFunction.apply(AbstractPartialFunction.scala:35)
at sangria.http.akka.SangriaAkkaHttp.$anonfun$prepareGraphQLPost$2(SangriaAkkaHttp.scala:137)
事实证明,最快的解决方案是从
akka
切换到 pekko
(无痛),并修改 akka-http
帮助器以使用 sangria
。具体来说,我克隆了 pekko-http
、
sangria-akka-http-core
和 sangria-akka-http-circe
,并将 akka-http-circe
替换为 import akka
。除此之外,主要问题在于构建过程而不是代码。希望这些库在某个时候会有官方 import org.apache.pekko
版本。