如何确定Scala项目中的正确依赖项版本?

时间:2016-04-04 22:13:16

标签: scala dependencies sbt

只要我引入一个依赖项(使用SBT),我就会看到有关多个依赖项的警告。

scalaVersion := "2.10.4"

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

警告:

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

通常我对警告非常迂腐。我想知道为什么他们在那里以及我应该做些什么来消除它们。如果你让警告堆积起来,你很快就会出现信噪问题。

但新手Scala dev(又名我)怎么会知道哪个版本有利?

我并不是真的要求如何压制这些警告,而是要了解选择一个版本而不是另一个版本的含义。在我看来,这些警告的来源是在spark.core中,不是吗?我怎么知道如何回应?

一旦我添加了更多的依赖项,这些警告就会堆积起来,真正的冲突/问题的可能性就会增加。

我花了一天时间试图找到神奇的互联网搜索关键字以找出要做的事情,但我发现的所有内容都是""不是"为什么& #34;,如果这是有道理的。

感谢。

更新:

根据this主题,我将0.13.8降级为0.13.7。它确实摆脱了所有噪音,但我不确定这是否真的是一个回答"。但至少我能够在没有大量警告的情况下添加所有依赖项,现在sbt-assembly也可以正常工作。

1 个答案:

答案 0 :(得分:1)

我的阅读是小版本应该向前兼容,所以对于slf4j它不应该是重要的。与Scala版本相同,从2.10.0移动到2.10.4应该不是问题(Scala保证了次要版本之间的二进制兼容性)。唯一可能出现问题的是Apache Commons。

您可以使用sbt-dependency-graph插件更准确地找出哪些库取决于哪个版本。此外,我认为如果您运行sbt evicted,您将获得有关冲突版本的更多信息。