build.sbt 和 build.scala 有啥区别?
Posted
技术标签:
【中文标题】build.sbt 和 build.scala 有啥区别?【英文标题】:What is the difference between build.sbt and build.scala?build.sbt 和 build.scala 有什么区别? 【发布时间】:2013-08-02 17:35:33 【问题描述】:我开始学习 Scala,几乎在每个教程中我都会看到一个描述项目设置的 build.sbt
文件。但现在我已经安装了giter8
并从模板创建了一个项目。并且从模板生成的项目错过了build.sbt
文件,但它有build.scala
(似乎用于相同目的,但更灵活)。
那么build.sbt
和build.scala
有什么区别呢?
哪个更受欢迎,为什么?
【问题讨论】:
【参考方案1】:举个简单的例子,这个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
s、lazy val
s 和 def
s(但不包括 object
s 和 class
es)。
参见the SBT document called ".scala build definition",尤其是“将 build.sbt 与 Build.scala 关联”部分。
如果您正在做一些复杂的事情,而您想要 Scala 的完整表现力,请考虑使用 .scala
构建定义。
【讨论】:
关于“build.sbt 很少最终足够”,在 0.12 及更早版本中确实如此,一旦你想定义任务或多模块构建,你需要 .scala 文件。这应该在 0.13 中解决,您现在可以在其中定义 val 和多个项目。当然,仍然欢迎您从 .scala 开始。 关于此主题的 SBT 文档 - scala-sbt.org/release/tutorial/Full-Def.html【参考方案2】:2016 年 7 月更新(3 年后)
Build.scala
在sbt 0.13.12 中被正式弃用
Build
特征已被弃用,取而代之的是.sbt
格式
PR 2530 实现了该弃用。
“Appendix: .scala
build definition”已更新。
【讨论】:
【参考方案3】:当.sbt
s 被编译时,它们在与project
目录中的.scala
文件合并之前。它们不能在递归任务中使用,也就是说,您不能从 sbt
自定义 sbt
,例如。有关更多详细信息,请考虑阅读相关部分是 sbt 文档:http://www.scala-sbt.org/release/docs/Getting-Started/Basic-Def.html#sbt-vs-scala-definition
【讨论】:
以上是关于build.sbt 和 build.scala 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章
sbt.build 用于多个项目和 playframework
sbteclipse:创建 build.sbt 和 plugins.sbt