Apa perbedaan antara build.sbt dan build.scala?

107

Saya mulai belajar Scala dan hampir di setiap tutorial saya melihat build.sbtfile yang menjelaskan pengaturan proyek. Tapi sekarang saya telah menginstal giter8dan membuat proyek dari template. Dan proyek yang dihasilkan dari template build.sbtfile tidak terjawab , tetapi memiliki build.scala(yang tampaknya digunakan untuk tujuan yang sama, tetapi lebih fleksibel).

Jadi apa perbedaan antara build.sbtdan build.scala?
Mana yang lebih disukai dan mengapa?

Judul Saya
sumber

Jawaban:

95

Sebagai contoh singkatnya, ini build.sbt:

name := "hello"

version := "1.0"

adalah notasi singkatan yang kira-kira setara dengan ini 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"      
  )
}

The .sbtFile juga dapat mencakup vals, lazy vals, dan defs (tapi tidak objects dan classes).

Lihat dokumen SBT bernama ".scala build definition" , khususnya bagian "Relating build.sbt to Build.scala".

Pertimbangkan .scaladefinisi build jika Anda melakukan sesuatu yang rumit di mana Anda menginginkan ekspresi penuh Scala.

Chris Martin
sumber
6
Pada "build.sbt jarang berakhir cukup", benar di 0.12 dan sebelumnya bahwa setelah Anda ingin mendefinisikan tugas atau build multi-modul, Anda memerlukan file .scala. Ini harus ditangani dalam 0.13, di mana Anda sekarang dapat mendefinisikan vals dan beberapa proyek. Anda tentu saja tetap dapat memulai dengan .scala.
Mark Harrah
1
Dokumentasi SBT tentang topik ini - scala-sbt.org/release/tutorial/Full-Def.html
neowulf33
31

Perbarui Juli 2016 (3 tahun kemudian)

Build.scalasecara resmi tidak digunakan lagi di sbt 0.13.12

The Buildsifat sudah ditinggalkan mendukung .sbtformat yang

PR 2530 mengimplementasikan penghentian itu.
" Lampiran: .scaladefinisi build " telah diperbarui.

VonC
sumber