Чим відрізняється 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 та classes).

Дивіться документ SBT під назвою ".scala build definition" , зокрема розділ "Відношення build.sbt до Build.scala".

Розгляньте .scalaвизначення побудови, якщо ви робите щось складне там, де ви хочете повну виразність Scala.


6
На "build.sbt рідко виявляється достатньою", правда в 0,12 і раніше, що як тільки ви хочете визначити завдання або побудувати багатомодулі, вам потрібні файли .scala. Це слід вирішити в 0.13, де тепер можна визначити вали та декілька проектів. Звичайно, ви все ще можете почати з .scala, хоча.
Марк Харра

1
Документація SBT на цю тему - scala-sbt.org/release/tutorial/Full-Def.html
neowulf33


13

Коли .sbtкомпілюються s, вони перед цим видом об'єднуються з .scalaфайлами всередині projectкаталогу. Вони не можуть бути використані в рекурсивних задач, тобто, ви не можете налаштувати sbtвід sbt, наприклад. Для отримання більш детальної інформації, ознайомтеся з прочитаним розділом документації sbt: http://www.scala-sbt.org/release/docs/Getting-Started/Basic-Def.html#sbt-vs-scala-definition

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.