¿Cuál es la diferencia entre build.sbt y build.scala?

107

Empecé a aprender Scala y casi en cada tutorial veo un build.sbtarchivo que describe la configuración del proyecto. Pero ahora he instalado giter8y creado un proyecto a partir de la plantilla. Y proyecto generado a partir del build.sbtarchivo de plantilla perdido , pero lo ha hecho build.scala(que parece usado para los mismos propósitos, pero es más flexible).

Entonces, ¿cuál es la diferencia entre build.sbty build.scala?
¿Cuál es más preferido y por qué?

Mi título
fuente

Respuestas:

95

Para dar un breve ejemplo, esto build.sbt:

name := "hello"

version := "1.0"

es una notación abreviada aproximadamente equivalente a esto 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"      
  )
}

El .sbtarchivo también puede incluir vals, lazy vals y defs (pero no objects y classes).

Consulte el documento SBT llamado "Definición de compilación .scala" , en particular la sección "Relacionando build.sbt con Build.scala".

Considere una .scaladefinición de compilación si está haciendo algo complicado donde desea la expresividad completa de Scala.

Chris Martin
fuente
6
En "build.sbt rara vez termina siendo suficiente", es cierto en 0.12 y anteriores que una vez que desee definir tareas o compilaciones de varios módulos, necesita archivos .scala. Esto debería abordarse en 0.13, donde ahora puede definir vals y múltiples proyectos. Sin embargo, aún eres bienvenido a comenzar con .scala.
Mark Harrah
1
Documentación de SBT sobre este tema - scala-sbt.org/release/tutorial/Full-Def.html
neowulf33