Jaka jest różnica między build.sbt i build.scala?

107

Zacząłem uczyć się Scali i prawie w każdym tutorialu widzę build.sbtplik opisujący ustawienia projektu. Ale teraz zainstalowałem giter8i utworzyłem projekt z szablonu. I wygenerowany projekt z szablonu brakującego build.sbtpliku, ale ma build.scala(który wydaje się być używany do tych samych celów, ale jest bardziej elastyczny).

Jaka jest więc różnica między build.sbti build.scala?
Który jest bardziej preferowany i dlaczego?

MyTitle
źródło

Odpowiedzi:

95

Oto krótki przykład build.sbt:

name := "hello"

version := "1.0"

to skrótowa notacja z grubsza odpowiadająca temu 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"      
  )
}

.sbtPlik może zawierać także valS, lazy valS i defS (ale nie objectS i classES).

Zobacz dokument SBT o nazwie „.scala build definition” , szczególnie sekcja „Powiązanie build.sbt z Build.scala”.

Rozważ .scaladefinicję kompilacji, jeśli robisz coś skomplikowanego, w którym chcesz uzyskać pełną ekspresję Scali.

Chris Martin
źródło
6
W przypadku pliku „build.sbt rzadko kiedy jest wystarczający”, prawdą jest, że w wersji 0.12 i wcześniejszych, gdy chcesz zdefiniować zadania lub kompilacje wielomodułowe, potrzebujesz plików .scala. Powinno to zostać rozwiązane w wersji 0.13, gdzie można teraz definiować wartości i wiele projektów. Oczywiście nadal możesz zacząć od .scala.
Mark Harrah,
1
Dokumentacja SBT na ten temat - scala-sbt.org/release/tutorial/Full-Def.html
neowulf33
31

Aktualizacja lipiec 2016 (3 lata później)

Build.scalajest oficjalnie przestarzały w sbt 0.13.12

BuildCecha jest przestarzałe na rzecz .sbtformatu

PR 2530 implementuje to wycofanie. Zaktualizowano
Dodatek: .scaladefinicja kompilacji ”.

VonC
źródło