当我使用sbt构建scala项目时,scala版本的关系是什么?

duk*_*kyz 9 scala version sbt sbt-plugin

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

SBT 1.x    => scala 2.12   
SBT plugin => scala 2.x   
My project => scala 2.11   
Run Code Online (Sandbox Code Playgroud)

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

lau*_*lic 10

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
Run Code Online (Sandbox Code Playgroud)

您想要使用的sbt插件必须与给定版本的sbt兼容(并且许多插件与0.13和1.x交叉编译).

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

scalaVersion := "2.12.4"
Run Code Online (Sandbox Code Playgroud)

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

scalaVersion := "2.12.4"
crossScalaVersions := Seq("2.11.12", "2.12.4")
Run Code Online (Sandbox Code Playgroud)

然后,如果你compile在sbt中运行,它将使用Scala 2.12.4,如果你运行+compile,它将首先使用Scala 2.11.12然后使用2.12.4进行编译.有关跨建筑的更多信息,请参阅sbt docs .