В чем разница между build.sbt и build.scala?

Я начал изучать Scala и почти в каждом учебнике я вижу файл build.sbt, который описывает параметры проекта. Но теперь я установил giter8 и создал проект из шаблона. И сгенерированный проект из шаблона пропустил build.sbt файл, но у него есть build.scala (который, кажется, используется для тех же целей, но он более гибкий).

Так в чем разница между build.sbt и build.scala?
Что более предпочтительно и почему?

Ответ 1

Чтобы дать краткий пример, этот build.sbt:

name := "hello"

version := "1.0"

- сокращенное обозначение, примерно эквивалентное этому project/Build.scala:

import sbt._
import Keys._

object Build extends Build {
  lazy val root = Project(id = "root", base = file(".")).settings(
    name := "hello",
    version := "1.0"      
  )
}

Файл .sbt может также содержать val s, lazy val s и def (но не object и class es).

Смотрите документ SBT, называемый "определение сборки .scala" , в частности раздел "Отсоединение build.sbt к Build.scala".

Рассмотрите определение сборки .scala, если вы делаете что-то сложное, где вам нужна полная выразительность Scala.

Ответ 3

Когда .sbt компилируются, они перед этим объединены с .scala файлами внутри каталога project. Они не могут использоваться в рекурсивных задачах, т.е. Вы не можете настроить sbt из sbt, например. Для получения более подробной информации рассмотрим раздел, посвященный связанным с чтением, документации sbt: http://www.scala-sbt.org/release/docs/Getting-Started/Basic-Def.html#sbt-vs-scala-definition