我正在使用 Scala 3 和 SBT 构建一个 Akka HTTP 应用程序,并且它在开始时运行良好。
但是当我添加下面的新依赖项时build.sbt
,应用程序开始出现错误 modules were resolved with conflicting cross-version suffixes in ProjectRrf
。
新添加的依赖项有:akka-http-circe
,,,,,。akka-http-json4s
json4s-native
circe-generic
scala-logging
为了使依赖项与 scala3 兼容,我使用 包装了其中一些.cross(CrossVersion.for3Use2_13)
。
导致此错误的原因可能是什么?
提前致谢!
添加的新依赖项:
("com.typesafe.scala-logging" %% "scala-logging" % "3.9.3").cross(CrossVersion.for3Use2_13),
("de.heikoseeberger" %% "akka-http-circe" % "1.39.2").cross(CrossVersion.for3Use2_13),
("de.heikoseeberger" %% "akka-http-json4s" % "1.39.2").cross(CrossVersion.for3Use2_13),
("org.json4s" %% "json4s-native" % "4.1.0-M4").cross(CrossVersion.for3Use2_13),
("io.circe" %% "circe-generic" % "0.15.0-M1").cross(CrossVersion.for3Use2_13),
构建.sbt:
lazy val akkaHttpVersion = "10.6.3"
lazy val akkaVersion = "2.9.4"
resolvers += "Akka library repository".at("https://repo.akka.io/maven")
fork := true
lazy val root = (project in file(".")).
settings(
inThisBuild(List(
organization := "com.example",
scalaVersion := "3.3.3"
)),
name := "eskimi-bidding-agent",
libraryDependencies ++= Seq(
"com.typesafe.akka" %% "akka-http" % akkaHttpVersion,
"com.typesafe.akka" %% "akka-http-spray-json" % akkaHttpVersion,
"com.typesafe.akka" %% "akka-actor-typed" % akkaVersion,
"com.typesafe.akka" %% "akka-stream" % akkaVersion,
"com.typesafe.akka" %% "akka-pki" % akkaVersion,
("com.typesafe.scala-logging" %% "scala-logging" % "3.9.3").cross(CrossVersion.for3Use2_13),
("de.heikoseeberger" %% "akka-http-circe" % "1.39.2").cross(CrossVersion.for3Use2_13),
("de.heikoseeberger" %% "akka-http-json4s" % "1.39.2").cross(CrossVersion.for3Use2_13),
("org.json4s" %% "json4s-native" % "4.1.0-M4").cross(CrossVersion.for3Use2_13),
("io.circe" %% "circe-generic" % "0.15.0-M1").cross(CrossVersion.for3Use2_13),
"ch.qos.logback" % "logback-classic" % "1.2.11",
"com.typesafe.akka" %% "akka-http-testkit" % akkaHttpVersion % Test,
"com.typesafe.akka" %% "akka-actor-testkit-typed" % akkaVersion % Test,
"org.scalatest" %% "scalatest" % "3.2.12" % Test
)
)
你没有包含错误最重要的部分。这是
因为你写了
可能您更喜欢使用
_3
库的版本而不是_2.13
尽可能使用库。所以你应该排除
如果你这样做,
sbt dependencyTree
你会看到在哪里akka-http-core _2.13
使用因此使用修改依赖项
.exclude(...)
现在错误是
(可能我们排除的内容也足以排除了
akka-parsing _2.13
。)如果你
sbt dependencyTree
再做一次,你会看到在哪里akka-http _2.13
使用再说
.exclude(...)
一遍目前项目已经建设成功。
您也可以将其写为
sbt 1.10.2
发生该错误的原因是,您具有(传递地)拉取的相同依赖项/工件,但其 Scala 版本后缀不兼容。
我没有检查你的具体情况,但例如可能是:
akka-http
Scala 3 拉取X
Scala 3库akka-http-circe
对于 Scala 3 使用 2.13(由于for3Use2_13
)并拉取X
Scala 2.13 的库冲突在于该库
X
被 Scala 3 和 2.13 所撤除。您可以通过排除两个版本之一来解决这个问题。但这可能并不总是有效,具体取决于库以及 2.13/3 版本之间是否存在差异/不兼容性。