В чем разница между 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Файл также может включать в себя valс, lazy valс, и defс (но не objectс и classх годов).

См. Документ SBT под названием «Определение сборки .scala» , в частности раздел «Связь 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

Когда .sbts компилируются, они перед этим сливаются с .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.