Scala3+SBT项目添加Akka HTTP相关依赖时遇依赖解析失败错误
Scala 3 + Akka HTTP项目依赖解析失败问题排查
我用Scala 3和SBT构建Akka HTTP项目,原本运行正常,但添加一批新依赖后出现依赖解析失败,提示找不到对应文件和仓库资源。我尝试给每个新依赖添加.cross(CrossVersion.for3Use2_13)配置,但问题依旧。
新增的依赖代码
("com.typesafe.scala-logging" %% "scala-logging" % "3.9.0").cross(CrossVersion.for3Use2_13), ("de.heikoseeberger" %% "akka-http-circe" % "1.27.0").cross(CrossVersion.for3Use2_13), ("de.heikoseeberger" %% "akka-http-json4s" % "1.22.0").cross(CrossVersion.for3Use2_13), ("com.jason-goodwin" %% "authentikat-jwt" % "0.4.5").cross(CrossVersion.for3Use2_13), ("org.json4s" %% "json4s-native" % "3.6.1").cross(CrossVersion.for3Use2_13), ("io.circe" %% "circe-generic" % "0.11.1").cross(CrossVersion.for3Use2_13), ("org.slf4j" %% "slf4j-simple" % "1.7.25").cross(CrossVersion.for3Use2_13),
完整build.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.0").cross(CrossVersion.for3Use2_13), ("de.heikoseeberger" %% "akka-http-circe" % "1.27.0").cross(CrossVersion.for3Use2_13), ("de.heikoseeberger" %% "akka-http-json4s" % "1.22.0").cross(CrossVersion.for3Use2_13), ("com.jason-goodwin" %% "authentikat-jwt" % "0.4.5").cross(CrossVersion.for3Use2_13), ("org.json4s" %% "json4s-native" % "3.6.1").cross(CrossVersion.for3Use2_13), ("io.circe" %% "circe-generic" % "0.11.1").cross(CrossVersion.for3Use2_13), ("org.slf4j" %% "slf4j-simple" % "1.7.25").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 ) )
可能的问题点及修复方案
1. Java库错误使用%%声明
slf4j-simple是纯Java库,没有Scala版本专属包,你用%%会自动给依赖名加上Scala版本后缀(比如slf4j-simple_3.3.3),但仓库里根本没有这个包。
修复:把%%改成%,且不需要cross配置:
"org.slf4j" % "slf4j-simple" % "1.7.25"
2. 依赖版本过旧,无Scala 2.13兼容包
你选的部分依赖版本太老,甚至没发布Scala 2.13版本:
authentikat-jwt 0.4.5:2017年最后更新,仅支持Scala 2.12,没有Scala 2.13包,用cross配置也找不到。circe-generic 0.11.1:2018年版本,不支持Scala 2.13。
修复:替换为支持Scala 2.13/Scala 3的新版本或替代库:
- 替换
authentikat-jwt:改用jwt-scala(支持Scala 3):"com.github.jwt-scala" %% "jwt-core" % "9.4.0" - 更新circe到兼容版本:
"io.circe" %% "circe-generic" % "0.14.6"
3. Akka HTTP与JSON扩展版本不匹配
akka-http-circe和akka-http-json4s的版本必须和Akka HTTP版本对应:
akka-http-circe 1.27.0仅支持Akka HTTP 10.2.x,完全不兼容你用的10.6.3。akka-http-json4s 1.22.0同样只支持旧版Akka HTTP。
修复:使用和Akka HTTP版本同步的官方JSON扩展:
"com.typesafe.akka" %% "akka-http-circe" % akkaHttpVersion
这个版本天然支持Scala 3,无需额外配置。
4. CrossVersion配置使用不当
用cross(CrossVersion.for3Use2_13)时,部分库用%%会导致SBT解析路径错误。对于需要用Scala 2.13版本的库,建议直接指定Scala 2.13包名:
"com.typesafe.scala-logging" % "scala-logging_2.13" % "3.9.0"
避免%%和cross配置的冲突。
5. 日志实现依赖冲突
你同时加了slf4j-simple和logback-classic,两者都是SLF4J的实现,同时存在会导致冲突。建议只保留一个(通常选logback-classic更灵活)。
内容的提问来源于stack exchange,提问作者Vakindu
相关产品推荐
相关产品推荐

