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

Scala Play应用升级sbt/Play版本时遇依赖冲突与日志异常

Scala Play升级sbt/插件遇到的依赖冲突与日志异常解决

问题概述

升级至sbt.version=1.9.2、Play插件2.8.19、Scala 2.13.11后,遇到两个核心问题:

  1. scala-xml依赖版本冲突
  2. SLF4J与Logback的类转换异常

1. scala-xml依赖冲突报错

[error]     * org.scala-lang.modules:scala-xml_2.12:2.1.0 (early-semver) is selected over {1.2.0, 1.1.1}
[error]         +- org.scala-lang:scala-compiler:2.12.18              (depends on 2.1.0)
[error]         +- com.typesafe.sbt:sbt-native-packager:1.5.2 (scalaVersion=2.12, sbtVersion=1.0) (depends on 1.1.1)
[error]         +- com.typesafe.play:twirl-api_2.12:1.5.1             (depends on 1.2.0)

注:冲突的是sbt运行时依赖的Scala 2.12版本scala-xml,项目本身使用Scala 2.13。

2. 日志类转换异常

从其他仓库复制代码后出现:

[error] java.lang.ClassCastException: org.slf4j.helpers.NOPLoggerFactory cannot be cast to ch.qos.logback.classic.LoggerContext

降级回sbt 1.3.8+Play 2.8.8可正常运行,尝试依赖覆盖、添加日志依赖无效,sbt dependencyTree因冲突无法执行。

解决方法

处理scala-xml依赖冲突

  • 覆盖sbt级别的依赖:在project/build.sbt或project/plugins.sbt中添加配置,强制sbt使用统一的scala-xml版本:
dependencyOverrides += "org.scala-lang.modules" % "scala-xml_2.12" % "2.1.0"
  • 升级sbt-native-packager版本:Play 2.8.19建议搭配兼容sbt 1.9.x的版本,在project/plugins.sbt中更新:
addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.9.10")

处理日志类转换异常

  • 明确绑定Logback依赖:在build.sbt中添加Logback依赖并排除冲突的SLF4J绑定:
libraryDependencies += "ch.qos.logback" % "logback-classic" % "1.2.11" excludeAll(
  ExclusionRule(organization = "org.slf4j", name = "slf4j-nop")
)
  • 检查冲突依赖:执行sbt evicted查看是否有其他SLF4J绑定(如slf4j-simple)被引入,针对性排除。
  • 清理sbt缓存:执行以下命令清除缓存后重新构建:
rm -rf ~/.ivy2/cache
rm -rf ~/.sbt
sbt clean compile

额外优化建议

  • 升级Scala版本至2.13.12(Play 2.8.x支持的最高Scala 2.13版本),减少潜在依赖兼容问题。
  • 确认Java 8环境正常,执行java -version验证版本为1.8。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 21:45:57