Quelle est la différence entre build.sbt et build.scala?

107

J'ai commencé à apprendre Scala et presque dans chaque tutoriel, je vois un build.sbtfichier qui décrit les paramètres du projet. Mais maintenant, j'ai installé giter8et créé un projet à partir d'un modèle. Et le projet généré à partir du build.sbtfichier manquant du modèle , mais il a build.scala(qui semble utilisé aux mêmes fins, mais il est plus flexible).

Alors, quelle est la différence entre build.sbtet build.scala?
Lequel est le plus préféré et pourquoi?

MyTitle
la source

Réponses:

95

Pour donner un bref exemple, ceci build.sbt:

name := "hello"

version := "1.0"

est une notation abrégée à peu près équivalente à ceci 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"      
  )
}

Le .sbtfichier peut également inclure vals, lazy vals et defs (mais pas objects et classes).

Voir le document SBT intitulé ".scala build definition" , en particulier la section "Relating build.sbt to Build.scala".

Considérez une .scaladéfinition de construction si vous faites quelque chose de compliqué où vous voulez toute l'expressivité de Scala.

Chris Martin
la source
6
Sur "build.sbt finit rarement par être suffisant", il est vrai dans la version 0.12 et les versions antérieures qu'une fois que vous voulez définir des tâches ou des builds multi-modules, vous avez besoin de fichiers .scala. Cela devrait être traité dans la version 0.13, où vous pouvez maintenant définir des vals et plusieurs projets. Vous êtes bien sûr toujours les bienvenus pour commencer avec .scala.
Mark Harrah
1
Documentation SBT sur ce sujet - scala-sbt.org/release/tutorial/Full-Def.html
neowulf33
31

Mise à jour de juillet 2016 (3 ans plus tard)

Build.scalaest officiellement obsolète dans sbt 0.13.12

Le Buildtrait est déconseillé au profit du .sbtformat

PR 2530 met en œuvre cette dépréciation.
" Annexe: .scaladéfinition de construction " a été mis à jour.

VonC
la source