2016-04-04 4 views
1

Sobald ich eine einzelne Abhängigkeit (mit SBT) einbringe, sehe ich Warnungen über mehrere Abhängigkeiten.Wie ermitteln Sie die richtige Abhängigkeitsversion in einem Scala-Projekt?

scalaVersion := "2.10.4" 

libraryDependencies ++= Seq(
    "org.apache.spark" %% "spark-core" % "1.5.0" % "provided" 
) 

Warnungen:

 [warn] Multiple dependencies with the same organization/name but different versions. To avoid conflict, pick one version: 
     [warn] * org.scala-lang:scala-compiler:(2.10.0, 2.10.4) 
     [warn] * org.apache.commons:commons-lang3:(3.3.2, 3.0) 
     [warn] * org.slf4j:slf4j-api:(1.7.10, 1.7.2) 

Normalerweise bin ich über Warnungen sehr pedantisch. Ich möchte wissen, warum sie dort sind und was ich tun sollte, um sie zu beseitigen. Wenn sich Warnungen häufen, haben Sie schnell ein Signal-zu-Rausch-Problem.

Aber wie würde ein Anfänger Scala dev (aka mir) wissen, welche Version zu bevorzugen?

Ich frage nicht wirklich, wie man diese Warnungen unterdrückt, so sehr, um die Implikationen der Auswahl einer Version gegenüber der anderen zu verstehen. Scheint mir, dass die Quelle dieser Warnungen in spark.core, nein ist? Wie soll ich wissen, wie ich reagieren soll?

Sobald ich weitere Abhängigkeiten hinzufüge, häufen sich diese Warnungen und die Möglichkeit eines echten Konflikts/Problems steigt.

Ich habe den Tag versucht, die magischen Internet-Suchschlüsselwörter zu finden, um herauszufinden, was zu tun ist, aber alles, was ich finde, ist "wie", nicht "warum", wenn das Sinn macht.

Danke.

UPDATE:

Basierend auf this Gewinde, ich von 0.13.8 zu 0.13.7 herabgestuft. Es hat den ganzen Lärm losgeworden, obwohl ich mir nicht sicher bin, ob das wirklich eine "Antwort" ist. Aber zumindest kann ich alle meine Abhängigkeiten ohne eine Reihe von Warnungen hinzufügen, und jetzt funktioniert auch sbt-assembly.

Antwort

1

Meine Lektüre ist, dass kleinere Versionen sollten vorwärts kompatibel sein, so dass für slf4j sollte es egal sein. Dasselbe gilt für die Scala-Version, der Wechsel von 2.10.0 auf 2.10.4 sollte kein Problem sein (Scala garantiert Binärkompatibilität zwischen Nebenversionen). Das einzige, was hier ein Problem sein könnte, ist Apache Commons.

Mit dem Plugin sbt-dependency-graph können Sie genauer herausfinden, welche Bibliotheken von welchen Versionen abhängen. Ich denke auch, wenn Sie sbt evicted ausführen, erhalten Sie mehr Informationen über widersprüchliche Versionen.

+0

Danke. Ich werde in sbt-Abhängigkeit-Graphen schauen. Ich habe sbt vertrieben, aber die Ergebnisse haben mir nicht geholfen festzustellen, ob ich ein Problem hatte oder nicht. Ich finde es nur komisch, dass das Einbringen einer einzigen Abhängigkeit zu Warnungen führen sollte - warum sollten diese nicht in der Spark-Core-Bibliothek selbst gelöst werden? – Stuart

+0

@Stuart - Ich habe Ihr Beispiel versucht und keine Warnung erhalten, obwohl Spark von ungefähr einhundert Bibliotheken abhängt. Welche sbt-Version spezifizierst du? Ich setze 'sbt.version = 0.13.11' (zuletzt) ​​in' project/build.properties'. –

+0

Wir haben 0,13,8 verwendet, aber auf 0,13,7 geändert (siehe Update in OP) – Stuart