В чем отличие работы `scala` и `sbt console`?

В чем разница в использовании оболочки scala по-разному?

Ответы

Ответ 1

SBT привязан к определенному проекту, определенному build.sbt; поэтому $ sbt console будет загружать тот же REPL, что и $ scala, но со всем кодом проекта и зависимостями, доступными для импорта. Он также, очевидно, загружает версию Scala, определенную в build.sbt.

Например:

$ scala
scala> import scalaz._
<console>:7: error: not found: value scalaz
       import scalaz._

vs с учетом этого build.sbt:

scalaVersion := "2.11.4"

libraryDependencies += "org.scalaz" %% "scalaz-core" % "7.1.0"

то

$ sbt console
...
scala> import scalaz._
import scalaz._

... импортирует scalaz._ просто отлично. Команда также гарантирует загрузку версии 2.11.4 Scala; первая команда, однако, загружает любую версию Scala, которая находится в PATH на данный момент (обычно это ваша системная установка Scala, версия которой может совпадать или не совпадать с 2.11.4).

Кроме того, загрузка sbt console в первый раз после добавления чего-то нового в libraryDependencies будет идти и автоматически получать новую зависимость.

Ответ 2

Если вы вызываете scala, вы получите любую версию scala на пути к вашей операционной системе.

Если вы вызываете консоль sbt, вы получаете версию scala, настроенную в sbt build (build.sbt), со всеми библиотеками, которые используются в сборке уже в пути к классам.

Подробнее см. этот ответ.