我用sbt搭建scala项目时,scala的版本有什么关系?

What's the relationship of the versions of scala when I use sbt to build a scala project?

我正在使用 SBT 1.x.There 构建一个 scala 项目(在 scala 2.11 中编写)1.x.There 有几个 "versions of scala" 让我感到困惑。

SBT 1.x    => scala 2.12   
SBT plugin => scala 2.x   
My project => scala 2.11   

请帮我弄清楚 them.And SBT 在编译时如何区分它们或 运行 项目之间有什么区别或关系?

sbt 本身及其插件使用的 Scala 版本完全独立于用于编译项目中代码的 Scala 版本。 sbt 版本决定了它使用的 Scala 版本:

  • sbt 0.13 使用 Scala 2.10
  • sbt 1.x 使用 Scala 2.12

您可以在project/build.properties中设置此版本,例如:

sbt.version = 1.1.1

您要使用的 sbt 插件必须与给定版本的 sbt 兼容(许多 cross-compiled 具有 0.13 和 1.x)。

要设置要用于项目代码的 Scala 版本,请在 build.sbt:

中使用 scalaVersion 设置
scalaVersion := "2.12.4"

同样,它独立于 sbt 的版本。您还可以 cross-compile 多个 Scala 版本的代码:

scalaVersion := "2.12.4"
crossScalaVersions := Seq("2.11.12", "2.12.4")

那么如果你在sbt中运行 compile,它会使用Scala 2.12.4,如果你运行 +compile,它会先用Scala编译2.11.12,然后是 2.12.4。有关 Cross-building.

的更多信息,请参阅 sbt 文档