【发布时间】:2013-08-02 17:35:33
【问题描述】:
我开始学习 Scala,几乎在每个教程中我都会看到一个描述项目设置的 build.sbt 文件。但现在我已经安装了giter8 并从模板创建了一个项目。并且从模板生成的项目错过了build.sbt 文件,但它有build.scala(似乎用于相同目的,但更灵活)。
那么build.sbt和build.scala有什么区别呢?
哪个更受欢迎,为什么?
【问题讨论】:
我开始学习 Scala,几乎在每个教程中我都会看到一个描述项目设置的 build.sbt 文件。但现在我已经安装了giter8 并从模板创建了一个项目。并且从模板生成的项目错过了build.sbt 文件,但它有build.scala(似乎用于相同目的,但更灵活)。
那么build.sbt和build.scala有什么区别呢?
哪个更受欢迎,为什么?
【问题讨论】:
举个简单的例子,这个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)。
参见the SBT document called ".scala build definition",尤其是“将 build.sbt 与 Build.scala 关联”部分。
如果您正在做一些复杂的事情,而您想要 Scala 的完整表现力,请考虑使用 .scala 构建定义。
【讨论】:
2016 年 7 月更新(3 年后)
Build.scala 在sbt 0.13.12 中被正式弃用
Build特征已被弃用,取而代之的是.sbt格式
PR 2530 实现了该弃用。
“Appendix: .scala build definition”已更新。
【讨论】:
当.sbts 被编译时,它们在与project 目录中的.scala 文件合并之前。它们不能在递归任务中使用,也就是说,您不能从 sbt 自定义 sbt,例如。有关更多详细信息,请考虑阅读相关部分是 sbt 文档:http://www.scala-sbt.org/release/docs/Getting-Started/Basic-Def.html#sbt-vs-scala-definition
【讨论】: