You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scala3+SBT构建Akka HTTP应用时依赖交叉版本冲突问题排查

解决Scala 3 + SBT中依赖交叉版本冲突问题

你遇到的modules were resolved with conflicting cross-version suffixes错误,核心原因是依赖树中同时存在针对Scala 2.13(后缀_2.13)和Scala 3(后缀_3)的同一类库模块,导致SBT无法确定使用哪个版本。具体诱因可以从以下几点排查:

可能的错误原因

  • 不必要的强制2.13版本依赖:你添加的部分依赖本身已经官方支持Scala 3,却被强制指定使用2.13版本。比如:
    • scala-logging 3.9.3:从3.9.0版本开始就原生支持Scala 3,无需用CrossVersion.for3Use2_13
    • json4s-native 4.1.0-M4:该版本已适配Scala 3,强制拉取2.13版本会和其他依赖中的Scala 3版本冲突
    • circe-generic 0.15.0-M1:Circe从0.14.x版本开始支持Scala 3,强制2.13版本会引发版本后缀冲突
  • 传递依赖引入冲突:即使你给主依赖加了2.13版本指定,它的传递依赖可能会拉取同一库的Scala 3版本(比如Akka HTTP相关依赖都是Scala 3版本,可能和你强制的2.13依赖产生传递依赖冲突)
  • 版本不匹配的适配库:akka-http-circe和akka-http-json4s的1.39.2版本可能未原生支持Scala 3,强制使用2.13版本后,其依赖的Circe/Json4s模块和你直接引入的Scala 3版本模块冲突

解决步骤

1. 移除不必要的CrossVersion.for3Use2_13

对已经支持Scala 3的依赖,去掉强制2.13版本的配置,修改后的依赖片段如下:

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,
  // 去掉不必要的cross配置
  "com.typesafe.scala-logging" %% "scala-logging"   % "3.9.3",
  // 若akka-http-circe/json4s 1.39.2不支持Scala3,暂时保留cross
  ("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",
  "io.circe"          %% "circe-generic"            % "0.15.0-M1",
  "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
)

2. 排查具体冲突模块

运行SBT命令查看完整依赖树,定位冲突的具体模块:

sbt dependencyTree

在输出中查找带有_2.13和_3后缀的同一库,比如如果看到circe-core_2.13和circe-core_3同时出现,就是冲突点。

3. 升级适配Scala3的依赖版本(可选但推荐)

如果akka-http-circe和akka-http-json4s的1.39.2版本确实不支持Scala3,建议升级到支持Scala3的版本(比如1.40.0及以上),这样可以完全移除CrossVersion.for3Use2_13配置,从根源避免冲突:

// 升级到支持Scala3的版本
"de.heikoseeberger" %% "akka-http-circe" % "1.40.0",
"de.heikoseeberger" %% "akka-http-json4s" % "1.40.0",

4. 强制统一依赖版本(兜底方案)

如果仍有冲突,使用dependencyOverrides强制指定同一版本的Scala3兼容模块:

dependencyOverrides ++= Seq(
  "io.circe" %% "circe-core" % "0.15.0-M1",
  "org.json4s" %% "json4s-core" % "4.1.0-M4"
)

内容的提问来源于stack exchange,提问作者Vakindu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 16:24:53