Qual é a diferença entre build.sbt e build.scala?

107

Comecei a aprender Scala e quase em todos os tutoriais vejo um build.sbtarquivo que descreve as configurações do projeto. Mas agora instalei giter8e criei um projeto a partir do modelo. E projeto gerado a partir do build.sbtarquivo de modelo perdido , mas tem build.scala(que parece usado para os mesmos fins, mas é mais flexível).

Então, qual é a diferença entre build.sbte build.scala?
Qual é a mais preferida e por quê?

MyTitle
fonte

Respostas:

95

Para dar um breve exemplo, este build.sbt:

name := "hello"

version := "1.0"

é uma notação abreviada aproximadamente equivalente a isto 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"      
  )
}

O .sbtarquivo também pode incluir vals, lazy vals e defs (mas não objects e classes).

Consulte o documento SBT denominado ".scala build definition" , particularmente a seção "Relacionando build.sbt com Build.scala".

Considere uma .scaladefinição de construção se você estiver fazendo algo complicado em que deseja a expressividade total do Scala.

Chris Martin
fonte
6
Em "build.sbt raramente acaba sendo suficiente", é verdade no 0.12 e anteriores que, uma vez que você deseja definir tarefas ou compilações de vários módulos, você precisa de arquivos .scala. Isso deve ser tratado no 0.13, onde agora você pode definir vals e vários projetos. É claro que você ainda é bem-vindo para começar com .scala.
Mark Harrah
1
Documentação do SBT sobre este tópico - scala-sbt.org/release/tutorial/Full-Def.html
neowulf33