Как мне преодолеть предупреждение «Там могут быть несовместимости ...» SBT? - PullRequest
2 голосов
/ 13 апреля 2019

Я новичок в SBT и не уверен, что делать с довольно страшным предупреждением из задачи evicted: [warn] There may be incompatibilities among your library dependencies; run 'evicted' to see detailed eviction warnings.

Полный вывод задачи ...

sbt:Sprout> evicted
[info] Updating ...
[info] Done updating.
[warn] There may be incompatibilities among your library dependencies; run 'evicted' to see detailed eviction warnings.
[warn] Found version conflict(s) in library dependencies; some are suspected to be binary incompatible:
[warn]  * org.scala-lang.modules:scala-xml_2.12:1.1.0 is selected over 1.0.6
[warn]      +- org.json4s:json4s-xml_2.12:3.6.3                   (depends on 1.1.0)
[warn]      +- org.scalatra:scalatra_2.12:2.6.5                   (depends on 1.0.6)
[warn]      +- com.typesafe.play:twirl-api_2.12:1.3.13            (depends on 1.0.6)
[info] Here are other dependency conflicts that were resolved:
[info]  * org.json4s:json4s-core_2.12:3.6.5 is selected over 3.6.3
[info]      +- org.json4s:json4s-jackson_2.12:3.6.5               (depends on 3.6.5)
[info]      +- org.json4s:json4s-xml_2.12:3.6.3                   (depends on 3.6.3)
[info]      +- org.scalatra:scalatra-json_2.12:2.6.5              (depends on 3.6.3)
[info]  * org.json4s:json4s-scalap_2.12:3.6.5 is selected over 3.6.3
[info]      +- org.json4s:json4s-core_2.12:3.6.5                  (depends on 3.6.5)
[info]      +- org.json4s:json4s-core_2.12:3.6.3                  (depends on 3.6.3)
[info]  * org.json4s:json4s-ast_2.12:3.6.5 is selected over 3.6.3
[info]      +- org.json4s:json4s-core_2.12:3.6.5                  (depends on 3.6.5)
[info]      +- org.json4s:json4s-core_2.12:3.6.3                  (depends on 3.6.3)
[success] Total time: 1 s, completed Apr 13, 2019 12:53:54 PM

"подозревается двоичная несовместимость" звучит серьезно.Это?

Есть ли какое-то исключение, что я могу пометить зависимости, чтобы получить зависимости в соответствии с правильными версиями?

Зависимости SBT похожи на ...

libraryDependencies ++= Seq(
  "org.scalatra" %% "scalatra" % ScalatraVersion exclude("org.slf4j","slf4j-api"),
  "org.scalatra" %% "scalatra-scalatest" % ScalatraVersion % "test",
  "org.slf4j" % "slf4j-api" % "1.7.26",
  "ch.qos.logback" % "logback-classic" % "1.2.3" % "runtime",
  "org.eclipse.jetty" % "jetty-webapp" % "9.4.9.v20180320" % "container",
  "javax.servlet" % "javax.servlet-api" % "3.1.0" % "provided",
  "org.scalatra" %% "scalatra-json" % ScalatraVersion,
  "org.json4s"   %% "json4s-jackson" % "3.6.5",
)

Ответы [ 2 ]

6 голосов
/ 13 апреля 2019

Это предупреждение появляется, потому что org.scalatra:scalatra_2.12:2.6.5 & com.typesafe.play:twirl-api_2.12:1.3.13 зависит от org.scala-lang.modules:scala-xml_2.12:1.0.6, но org.json4s:json4s-xml_2.12:3.6.3 использует org.scala-lang.modules:scala-xml_2.12:1.1.0

Чтобы скрыть это предупреждение, вы можете использовать dependencyOverrides:

dependencyOverrides += "org.scala-lang.modules" % "scala-xml_2.12" % "1.0.6"

Опять же, он просто скрывает предупреждение, но не гарантирует совместимость между вашими библиотеками и установленной версией.

3 голосов
/ 14 апреля 2019

В идеале мы должны разрешать предупреждения об эвекции вместо переопределения, если это вообще возможно, из-за потенциально опасных ошибок, которые можно отследить. В этом случае это возможно, если мы хотим сбросить версии scalatra и json4s-jackson до 2.6.4 и 3.5.2 соответственно, например:

val ScalatraVersion = "2.6.4"

libraryDependencies ++= Seq(
  "org.scalatra" %% "scalatra" % ScalatraVersion exclude("org.slf4j","slf4j-api"),
  "org.scalatra" %% "scalatra-scalatest" % ScalatraVersion % "test",
  "org.slf4j" % "slf4j-api" % "1.7.26",
  "ch.qos.logback" % "logback-classic" % "1.2.3" % "runtime",
  "javax.servlet" % "javax.servlet-api" % "3.1.0" % "provided",
  "org.scalatra" %% "scalatra-json" % ScalatraVersion,
  "org.json4s"   %% "json4s-jackson" % "3.5.2",
)
...