Подтвердить что ты не робот

Почему ошибка Конфликтные суффиксы перекрестной версии?

Я получаю эту ошибку, когда пытаюсь скомпилировать проект Scala в sbt.

Modules were resolved with conflicting cross-version suffixes in {file:/home/seven3n/caja/Flujo_de_caja/}flujo_de_caja:
[error]    com.typesafe.akka:akka-actor _2.11, _2.10
[error]    org.scalaz:scalaz-effect _2.10, _2.11
[error]    org.scalaz:scalaz-core _2.10, _2.11
[trace] Stack trace suppressed: run last *:update for the full output.
[error] (*:update) Conflicting cross-version suffixes in: com.typesafe.akka:akka-actor, org.scalaz:scalaz-effect, org.scalaz:scalaz-core

Это мой файл build.sbt:

scalaVersion := "2.11.0"

resolvers ++= Seq(
  "Sonatype snapshots repository" at "https://oss.sonatype.org/content/repositories/snapshots/",
  "Spray repository" at "http://repo.spray.io/",
  "Typesafe repository" at "http://repo.typesafe.com/typesafe/releases/"
)

libraryDependencies ++= {
  val akkaVersion = "2.3.2"
  val sprayVersion = "1.3.1-20140423"
  val sprayJsonVersion = "1.2.6"
  val reactiveMongoVersion = "0.11.0-SNAPSHOT"
  val scalaTestVersion = "2.1.5"
  val specs2Version = "2.3.11"
  val foloneVersion = "0.12-SNAPSHOT"
  Seq(
    "com.typesafe.akka" %% "akka-actor"        % akkaVersion,
    "com.typesafe.akka" %% "akka-testkit"      % akkaVersion,
    "io.spray"          %% "spray-can"         % sprayVersion,
    "io.spray"          %% "spray-routing"     % sprayVersion,
    "io.spray"          %% "spray-testkit"     % sprayVersion,
    "io.spray"          %% "spray-json"        % sprayJsonVersion,
    "org.reactivemongo" % "reactivemongo_2.10" % reactiveMongoVersion,
    "org.scalatest"     %% "scalatest"         % scalaTestVersion % "test",
    "org.specs2"        %% "specs2"            % specs2Version % "test",
    "info.folone"       % "poi-scala_2.10"     % foloneVersion
  )
}

Любые предложения?

4b9b3361

Ответ 1

Конфликты появляются потому, что:

  • вы указали, что ваша версия Scala должна быть 2.11
  • вы явно указали версию Scala (2.10) для библиотек reactivemongo и poi- scala.

Исправление состоит в том, чтобы использовать оператор %% для этих двух библиотек.

"org.reactivemongo" %% "reactivemongo" % reactiveMongoVersion,
"info.folone"       %% "poi-scala"     % foloneVersion

Это цель оператора %%. Чтобы добавить объявленную версию Scala (2.11 в вашем случае) к имени артефакта.

Ответ 2

У меня была такая же проблема, и я просто удалил тег scalaVersion из своего sbt файла и изменил строку

libraryDependencies += "org.apache.spark" %% "spark-core" % "1.6.0"

к

libraryDependencies += "org.apache.spark" % "spark-core_2.11" % "1.6.0"

и проблема исчезла.

Ответ 3

Я попытался использовать %%, но это не сработало. Я вручную исключил его с помощью

("org.reactivemongo" % "reactivemongo" % reactiveMongoVersion)
    .exclude("com.typesafe.akka", "akka-actor_2.10")
    .exclude("org.scalaz", "scalaz-effect")
    .exclude("org.scalaz", "scalaz-core")

Ответ 4

Чтобы выяснить, кто звонит, вы можете использовать плагин, но проще посмотреть на target/scala-2.*/resolution-cache/reports/. Существует отчет о разрешении плюща для каждой конфигурации. Найдите *-compile.xml и *-test.xml и найдите конфликтующую библиотеку. Вы можете увидеть подобное с

<module organisation="com.github.nscala-time" name="nscala-time_2.11">
    ...
    <caller organisation="com.tumblr" name="colossus-metrics_2.11" conf="compile, runtime" rev="1.2.0" rev-constraint-default="1.2.0" rev-constraint-dynamic="1.2.0" callerrev="0.7.2-RC1"/>
    ...
</module>

Об этом должен сообщить вам вызывающий модуль.