我在 GitHub 上托管了一个项目,我使用 scala-steward 来使我的插件和依赖项保持最新。这在一段时间内有效,但现在使用此类自动更新却变成了一场噩梦。事情是这样的。在我的plugins.sbt中,我依赖于scoverage,它已由scala-steward更新到版本2.0.6。但是拉取请求未能通过编译阶段,我看到以下错误:
[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.3.0, 1.2.0, 1.1.1, 1.0.6}
[error] +- org.scoverage:scalac-scoverage-reporter_2.12:2.0.7 (depends on 2.1.0)
[error] +- org.scalariform:scalariform_2.12:0.2.0 (depends on 1.0.6)
[error] +- org.scala-lang:scala-compiler:2.12.16 (depends on 1.0.6)
[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] +- com.github.sbt:sbt-native-packager:1.9.9 (sbtVersion=1.0, scalaVersion=2.12) (depends on 1.3.0)
[error]
首先,在编译时报告此类不兼容性以避免任何运行时意外是件好事。但是,我不确定如何解决这个问题。感觉我遇到了障碍。
编辑:这是我的实际项目:https://github.com/joesan/plant-simulator
我必须在我的
project/plugins.sbt
文件中执行以下操作才能修复此错误:
ThisBuild / libraryDependencySchemes += "org.scala-lang.modules" %% "scala-xml" % VersionScheme.Always
我还在我的 build.sbt 中添加了以下内容:
ThisBuild / evictionErrorLevel := Level.Info
但我想我的 build.sbt 中不需要它。希望这对某人有帮助! Discord 的 Scala 社区帮助我解决了这个问题。感谢他们!
在我的例子中,我通过将 akka-http 版本从 10.5.0 降低到 10.4.0 以及 akka 2.7.0 来“修复”它。我也用
addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.8.16")
。
相对不清楚,但我们可以在错误堆栈中看到
com.typesafe.play:twirl-api
,而且我们还可以看到 scala-xml:2.1.0
作为 akka-http-xml:10.5.0
的子依赖项