本文翻译自 # # What's the relationship of the versions of scala when I use sbt to build a scala project?
译者:耐心的农夫2020
时间:2020-03-30 12:08:00
问题
我正在用 SBT 1.x
构建一个 Scala 项目(用 Scala 2.11 写的)。有一些 Scala 版本让我感到困惑。
SBT 1.x => Scala 2.12
SBT plugin => Scala 2.x
My project => Scala 2.11
请帮我弄明白这些 Scala 版本之间的差异和关系。SBT 在编译或者运行这个项目的时候是如何区分它们的?
回答
sbt 自己和它的插件使用的 Scala 版本完全独立于编译你项目的代码使用的 Scala 版本。sbt 的版本决定了它使用的 Scala版本。
- sbt 0.13 使用 Scala 2.10
- sbt 1.x 使用 Scala 2.12
你可以在 project/build.properties
文件中设置 sbt 的版本,例如:
sbt.version = 1.1.1
你想使用的 sbt 插件必须与给定的 sbt 版本兼容,许多 sbt 插件都使用 0.13 和 1.x 交叉编译过。
你可以使用 build.sbt
配置文件中的 scalaVersion
配置项来指定你项目的代码需要使用的 Scala 版本。例如:
scalaVersion := "2.12.4"
再次强调一下,上面项目代码使用的 Scala 版本和 sbt 使用的 Scala 版本是相互独立的。你也可以指定不同的 Scala 版本交叉编译你的代码。例如:
scalaVersion := "2.12.4"
crossScalaVersions := Seq("2.11.12", "2.12.4")
如果你用 sbt 运行 compile
,将使用 Scala 2.12.4 编译项目代码。如果你用 sbt 运行 +compile
,将先使用 Scala 2.11.12 编译项目代码,再使用 2.12.4 编译项目代码。关于 Cross-building 可以参考 sbt 文档。