Was ist der Unterschied zwischen build.sbt und build.scala?

107

Ich habe angefangen, Scala zu lernen und fast in jedem Tutorial sehe ich eine build.sbtDatei, die die Projekteinstellungen beschreibt. Aber jetzt habe ich giter8ein Projekt aus Vorlage installiert und erstellt. Und generiertes Projekt aus Vorlage fehlte build.sbtDatei, aber es hatbuild.scala (was für die gleichen Zwecke verwendet scheint, aber es ist flexibler).

Was ist der Unterschied zwischen build.sbtund build.scala?
Welches ist bevorzugter und warum?

Mein Titel
quelle

Antworten:

95

Um ein kurzes Beispiel zu geben build.sbt:

name := "hello"

version := "1.0"

ist eine Kurzschreibweise, die in etwa dieser entspricht 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"      
  )
}

Die .sbtDatei kann auch vals, lazy vals und defs enthalten (jedoch nicht objects und classes).

Siehe das SBT-Dokument mit dem Namen ".scala Build Definition". , insbesondere den Abschnitt "Verknüpfen von build.sbt mit Build.scala".

Ziehen Sie eine .scalaBuild-Definition in Betracht , wenn Sie etwas Kompliziertes tun, bei dem Sie die volle Ausdruckskraft von Scala nutzen möchten.

Chris Martin
quelle
6
Bei "build.sbt ist selten ausreichend" ist es in Version 0.12 und früher richtig, dass Sie, sobald Sie Aufgaben oder Builds mit mehreren Modulen definieren möchten, .scala-Dateien benötigen. Dies sollte in 0.13 behandelt werden, wo Sie jetzt Werte und mehrere Projekte definieren können. Sie können natürlich trotzdem mit .scala beginnen.
Mark Harrah
1
SBT-Dokumentation zu diesem Thema - scala-sbt.org/release/tutorial/Full-Def.html
neowulf33
31

Update Juli 2016 (3 Jahre später)

Build.scalaist in sbt 0.13.12 offiziell veraltet

Das BuildMerkmal ist zugunsten des .sbtFormats veraltet

PR 2530 implementiert diese Abschreibung.
" Anhang: .scalaBuild-Definition " wurde aktualisiert.

VonC
quelle