1. 取得最特定的原始碼

取得最特定的原始碼 

由於編譯器介面會針對專案中使用的每個 Scala 版本重新編譯,因此其原始碼必須與 sbt 支援的所有 Scala 版本(從 Scala 2.8 到最新的 Scala 版本)保持相容。

這對 sbt 維護者和 Scala 編譯器作者來說都付出了巨大的代價

  1. 編譯器作者無法從 Scala 編譯器中移除舊的和已棄用的公開 API。
  2. sbt 無法使用 Scala 編譯器中定義的新 API。
  3. sbt 必須實作各種駭客手段,才能保持與所有版本的 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 模組的發佈機制。