最近学习scala和paly,使用idea模板创建项目后,项目构建时就发现报错了,处理了很久,记录一下。
错误日志:
[error] (update) found version conflict(s) in library dependencies; some are suspected to be binary incompatible:
[error]
[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.17 (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)
[error]
[error]
[error] this can be overridden using libraryDependencySchemes or evictionErrorLevel
原因:看描述应该是scala-xml这个依赖冲突了,这个依赖用在scala、sbt、play中,初步怀疑由于三个版本不兼容导致。
当前项目版本:
scala: 2.12.17
sbt版本:1.8.0
play版本:2.8.18
参考:
搜索了一下关于这个问题的issue
sbt关于scala-xml的讨论https://github.com/sbt/sbt/issues/6997
scala关于scala-xml的讨论https://github.com/scala/scala/pull/9743
play关于scala-xml的讨论https://github.com/playframework/playframework/issues/11461
play-twirl关于scala-xml的讨论https://github.com/playframework/twirl/pull/548
实际原因:
由于scala-xml1.x与2.x变更较大,所以各类库对其依赖未同时升级导致依赖冲突。本项目是由于play-twirl依赖scala-xml1.x,scala与sbt使用2.x导致。
scala从2.12.17开始升级xml依赖到2.x
sbt从1.8.0开始升级xml依赖到2.x
play尚未更新,目前最新2.8.18,仍然依赖1.x,此处是导致本次构建失败的原因。
解决:
在project/plugins中添加
ThisBuild / libraryDependencySchemes ++= Seq(
"org.scala-lang.modules" %% "scala-xml" % VersionScheme.Always
)
最后:
看到paly相关人员已经注意到sbt1.8.0发布的消息,可能很快将会合并scala-xml2.x,发布新的版本后可能不会再存在当前问题。