10

我正在使用 SBT 1.x 构建一个 scala 项目(用 scala 2.11 编写)。有一些“scala 版本”让我感到困惑。

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

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

4

1 回答 1

15

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 兼容(并且许多都与 0.13 和 1.x 交叉编译)。

要设置要用于项目中代码的 Scala 版本,请使用以下scalaVersion设置build.sbt

scalaVersion := "2.12.4"

同样,它独立于 sbt 的版本。您还可以为多个 Scala 版本交叉编译您的代码:

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

然后如果你compile在 sbt 中运行,它将使用 Scala 2.12.4,如果你运行+compile,它将首先使用 Scala 2.11.12 编译它,然后使用 2.12.4。有关Cross-building的更多信息,请参阅 sbt 文档。

于 2018-02-27T14:26:22.760 回答