Доступ к компилятору
Scala можно получить программно через API, упакованный по зависимости scala-compiler.jar
, поэтому такие инструменты, как IDE и SBT, могут реализовывать свои собственные клиентские интерфейсы через этот API для управления функциональностью компилятора. scalac
- это всего лишь сценарий bash, который выполняет scala.tools.nsc.MainClass
класс из scala-compiler.jar
.
Использует ли sbt
scalac
?
Нет, sbt напрямую использует API компилятора. Одна из ключевых концепций, которую нужно понять в отношении sbt, заключается в том, что определение сборки само по себе является Scala кодом, либо ванильным, либо DSL, но, тем не менее, Scala. версия Scala, использованная для компиляции определения сборки, отделена от версии Scala, использованной для компиляции проекта. Исходный код определения сборки в build.sbt
и project/*.scala
будет скомпилирован с использованием версии Scala, указанной косвенно с помощью параметра sbt.version=1.2.8
в project/build.properties
, тогда как собственно исходный код проекта в src/main/scala/*
будет скомпилирован с использованием версии Scala указывается непосредственно через scalaVersion := "2.13.1"
, настройка в build.sbt
. Обратите внимание, как они действительно могут отличаться. Думайте об определении сборки как о просто другом Scala приложении , которое использует sbt API для своей реализации.