SBT、scala 编译器和 scala SDK 之间有什么关系?

What is the relationship between SBT, the scala compiler and the scala SDK?

如果我没记错的话,SDK就是scala项目中经常使用的一堆常用jar,SBT是构建工具,也包含scala编译器?

项目需要访问Scalahome路径给定的SDK?

对吗?

来自 scala-lang.org 的发行版包含各种模块,包括编译器和标准库。

命令行工具 scalac 和 scala 默认将所有这些 jar 放在 class 路径中。当你启动 REPL(通过 运行ning scala)时,例如,scala.swing 包在 class 路径上。

sbt 构建工具要求您指定所有依赖项,然后下载它们。或者,可以指定要使用的本地 Scala 发行版。

此外,sbt 本身既是引导构建的启动器,也是 运行 构建的工具,它可以是 sbt 的任意版本。另外,可以在项目基础上设置用于构建项目的编译器版本。

虽然 sbt 和编译器以这种方式在功能上分离,但它们至少在源代码级别与编译器和 IDE 一样耦合。 (编译器源码里有大意的注释,"SBT still uses this.")

此外,众所周知,编译器依赖于增量编译来提供高质量的开发人员体验。 activator工具,作为网关工具,依赖sbt。

从这个意义上说,sbt 不仅仅是编译器工具的包装器,而且是其可用性的关键。

你可以只用一个 sbt 项目,或者只用一个 IDE 工作区。您可以从 sbt 或 IDE 工作表中 运行 REPL。

我喜欢从任意目录 运行 REPL,并且我保留了一堆用于 运行 scalac 的代码片段,所以我总是有一个 shell 别名我当前的发行版。如果只有 sbt 可以选择 运行 自己在 "clean room" tmp 目录中。也许 sbt-extras 提供了。