build.sbt และ build.scala แตกต่างกันอย่างไร


107

ฉันเริ่มเรียนรู้ Scala และเกือบทุกบทช่วยสอนฉันเห็นbuild.sbtไฟล์ที่อธิบายการตั้งค่าโครงการ แต่ตอนนี้ฉันได้ติดตั้งgiter8และสร้างโปรเจ็กต์จากเทมเพลตแล้ว และสร้างโปรเจ็กต์จากbuild.sbtไฟล์ที่พลาดเทมเพลตแต่มีbuild.scala(ซึ่งดูเหมือนจะใช้เพื่อวัตถุประสงค์เดียวกัน แต่มีความยืดหยุ่นมากกว่า)

แล้วอะไรคือความแตกต่างระหว่างbuild.sbtและbuild.scala?
ชอบแบบไหนมากกว่ากันและเพราะอะไร?

คำตอบ:


95

เพื่อให้ตัวอย่างสั้น ๆ สิ่งนี้build.sbt:

name := "hello"

version := "1.0"

เป็นสัญกรณ์ชวเลขที่เทียบเท่ากับสิ่งนี้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"      
  )
}

.sbtไฟล์ยังสามารถรวมvals, lazy vals และdefs ( แต่ไม่objects และclasse)

ดูเอกสาร SBT ที่เรียกว่า ".scala build definition"โดยเฉพาะส่วน "Relating build.sbt to Build.scala"

พิจารณา.scalaคำจำกัดความของการสร้างหากคุณกำลังทำบางสิ่งที่ซับซ้อนซึ่งคุณต้องการให้ Scala แสดงออกอย่างเต็มที่


6
บน "build.sbt แทบจะไม่เพียงพอ" มันเป็นจริงใน 0.12 และก่อนหน้านี้เมื่อคุณต้องการกำหนดงานหรือการสร้างแบบหลายโมดูลคุณต้องมีไฟล์. scala ควรระบุไว้ใน 0.13 ซึ่งตอนนี้คุณสามารถกำหนด vals และหลายโครงการได้ แน่นอนว่าคุณยังสามารถเริ่มต้นด้วย. scala ได้
Mark Harrah

1
เอกสาร SBT ในหัวข้อนี้ - scala-sbt.org/release/tutorial/Full-Def.html
neowulf33

31

อัปเดตกรกฎาคม 2016 (3 ปีต่อมา)

Build.scalaเลิกใช้งานอย่างเป็นทางการในsbt 0.13.12

Buildลักษณะจะเลิกในความโปรดปรานของ.sbtรูปแบบ

PR 2530ดำเนินการเลิกใช้งานนั้น อัปเดต
" ภาคผนวก: .scalaคำจำกัดความของโครงสร้าง " แล้ว


13

เมื่อ.sbtกำลังคอมไพล์พวกเขาจะอยู่ก่อนการรวมประเภทนั้นกับ.scalaไฟล์ภายในprojectไดเร็กทอรี ไม่สามารถใช้ในงานแบบวนซ้ำได้นั่นคือคุณไม่สามารถปรับแต่งsbtจากsbtตัวอย่างเช่น สำหรับข้อมูลเพิ่มเติมโปรดอ่านส่วนที่เกี่ยวข้องคือเอกสาร sbt: http://www.scala-sbt.org/release/docs/Getting-Started/Basic-Def.html#sbt-vs-scala-definition

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.