Scala sbt:sbt 中的多个依赖项

Posted

技术标签:

【中文标题】Scala sbt:sbt 中的多个依赖项【英文标题】:Scala sbt: Multiple dependencies in sbt 【发布时间】:2016-03-31 19:45:54 【问题描述】:

我是Scala的新用户,按照创建scala sbt项目的方式。

https://www.youtube.com/watch?v=Ok7gYD1VbNw


添加后

libraryDependencies += "org.scalatest" % "scalatest_2.11" % "2.2.4" % "test"

build.sbt,并刷新项目,我得到了这个消息。

[警告] 具有相同组织/名称但版本不同的多个依赖项。为避免冲突,请选择一个版本:

[警告] * org.scala-lang:scala-reflect:(2.11.2, 2.11.7)

[警告] * org.scala-lang.modules:scala-xml_2.11:(1.0.2, 1.0.4)

并且在 build.sbt 中,单词“scalatest”是红色的,表示它是一个未解决的依赖项。

我应该更改项目设置中的某些内容吗,例如 scala sdk?

最好的问候!

【问题讨论】:

一旦警告它应该不是问题。检查errors。如果有,请在此处打印。 如果你使用 IntellJ Idea,build.sbt 中的任何东西都可以是红色的,但它仍然会编译。 IDE 的解析器有时不能解析东西(scala 代码也是如此),所以通常只要它编译,你就可以忽略红色的东西。其他 IDE 可能也是如此。 @Archeg 如果我的配置是正确的,我可以运行测试文件,对吧?目前,我什至在 IDE 中右键单击文件时无法“运行”。 您刚刚发布了一个警告,这可能与不可工作状态无关。当你尝试运行它时它会说什么? 【参考方案1】:

您可以考虑添加这些依赖项:

libraryDependencies ++= Seq(
  "org.scala-lang" % "scala-reflect" % "2.11.7",
  "org.scala-lang.modules" % "scala-xml_2.11" % "1.0.4"
)

它强制编译器选择具体版本的库。它为我解决了问题。

【讨论】:

我想知道为什么 Idea 无法通过 scalaVersion := "2.11.7" in build.sbt 自行解决 这在大多数情况下都有效,但是我遇到了1.0.41.0.5org.scala-lang.modules:scala-xml 版本的问题。我已经从常春藤缓存中清除它们,但没有积极的结果。【参考方案2】:

我能够通过从 scalatest 依赖项中排除这些来解决此问题。

libraryDependencies ++= Seq(
  "org.scalatest" % "scalatest_2.11" % "2.2.4" % "test"
    exclude("org.scala-lang", "scala-reflect")
    exclude("org.scala-lang.modules", "scala-xml_2.11")
)

【讨论】:

比起 Bartłomiej Szałach 的回答,我更喜欢这个。

以上是关于Scala sbt:sbt 中的多个依赖项的主要内容,如果未能解决你的问题,请参考以下文章

Play 2.0 / SBT:从 Build.scala 中的某些/所有模块中排除某些传递依赖项

Scala:SBT 为每个阶段捆绑不同的库依赖项

使用 sbt-assembly 来自单个项目的具有不同外部依赖项的多个可执行 jar 文件

使用 SBT 和 Scala IDE 添加和删除依赖项

更改后如何强制 IntelliJ IDEA 从 build.sbt 重新加载依赖项?

Sbt 0.13 插件依赖和 scala-reflect.jar 版本冲突