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


Empecé a aprender Scala y casi en cada tutorial veo un archivo build.sbt que describe la configuración del proyecto. Pero ahora he instalado giter8 y he creado un proyecto a partir de la plantilla. Y proyecto generado a partir de la plantilla perdido build.sbt archivo, pero tiene build.scala (que parece utilizado para los mismos fines, pero es más flexible).

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

 103
Author: Mark Rogers, 2013-08-01

3 answers

Para dar un breve ejemplo, este 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 .sbt archivo también puede incluir {[5] s}, {[6] s}, y defs (pero no {[8] s}y classes).

Véase el documento de SBT llamado ".definición de construcción de scala " , particularmente la sección "Relativa a la construcción.sbt para Construir.scala".

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

 93
Author: Chris Martin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-05 19:56:09

Actualización de julio de 2016 (3 años después)

Build.scala está oficialmente en desuso en sbt 0.13.12

El rasgo Build está en desuso en favor del formato .sbt

PR 2530 implementa esa obsolescencia.
"Appendix: .scala build definition " ha sido actualizado.

 28
Author: VonC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-25 11:15:14

Cuando se compilan .sbt, están antes de que se fusionen con los archivos .scala dentro del directorio project. No se pueden usar en tareas recursivas, es decir, no se puede personalizar sbt desde sbt, por ejemplo. Para obtener información más detallada, considere leer la sección relacionada es documentación sbt: http://www.scala-sbt.org/release/docs/Getting-Started/Basic-Def.html#sbt-vs-scala-definition

 13
Author: tkroman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-08-01 17:03:45