web-dev-qa-db-fra.com

Pourquoi l'erreur est-elle en conflit avec les suffixes de versions croisées?

J'obtiens cette erreur lorsque j'essaie de compiler un projet Scala dans 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

Voici mon fichier 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
  )
}

Aucune suggestion?

Les conflits apparaissent parce que:

  1. vous avez spécifié votre Scala à 2.11
  2. vous avez explicitement spécifié la version Scala (2.10) pour les bibliothèques reactivemongo et poi-scala.

Le correctif consiste à utiliser le %% opérateur également pour ces deux bibliothèques.

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

C'est le but du %% opérateur. Pour ajouter la version Scala version (2.11 dans votre cas) déclarée au nom de l'artefact).

41
Ionuț G. Stan

J'ai eu le même problème et j'ai simplement supprimé la balise scalaVersion de mon fichier sbt et modifié la ligne

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

à

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

et le problème a disparu.

4
Mayukh

J'ai essayé d'utiliser %% mais cela n'a pas fonctionné. Je l'ai exclu manuellement en utilisant

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

Pour rechercher qui est l'appelant, vous pouvez utiliser un plug-in, mais un moyen plus simple d'examiner target/scala-2.*/resolution-cache/reports/. Il existe un rapport de résolution Ivy pour chaque configuration. Chercher *-compile.xml et *-test.xml et recherchez la bibliothèque en conflit. Vous pouvez voir similaire avec

<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>

Cela devrait vous indiquer l'appelant du module.

0
Roman Kazanovskyi