1. 获取最具体的源代码

获取最具体的源代码 

由于编译器接口针对项目中使用的每个 Scala 版本重新编译,因此其源代码必须与 sbt 支持的所有 Scala 版本保持兼容(从 Scala 2.8 到最新版本的 Scala)。

这对 sbt 维护者和 Scala 编译器作者来说都是巨大的代价。

  1. 编译器作者无法从 Scala 编译器中删除旧的和已弃用的公共 API。
  2. sbt 无法使用 Scala 编译器中定义的新 API。
  3. sbt 必须实现 各种 hackery 以保持与所有版本的 Scala 编译器源代码兼容并支持新功能。

为了规避这个问题,sbt 中实现了一种新机制,允许 sbt 获取最适合所用 Scala 版本的编译器接口源代码版本。

例如,对于使用 Scala 2.11.8-M2 编译的项目,sbt 将按以下顺序查找编译器接口源代码的以下版本。

  1. 2.11.8-M2
  2. 2.11.8
  3. 2.11
  4. 默认源代码。

这种新机制允许 Scala 编译器和 sbt 向前发展并享受新的 API,同时确保使用旧版本 Scala 的用户仍然能够使用 sbt。

最后,此技术的另一个优势是它依赖于 Ivy 来检索编译器桥接的源代码,但可以轻松移植以用于 Maven,Maven 是 sbt 维护者希望用来分发 sbt 模块的分发机制。