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.sbtbuild.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 文件还可以包括 vals、lazy vals 和 defs(但不包括 objects 和 classes)。

参见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】:

.sbts 被编译时,它们在与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-native-packager 的好例子

sbt.build 用于多个项目和 playframework

sbt.build 文件的导入未找到错误

sbteclipse:创建 build.sbt 和 plugins.sbt

在 build.sbt 和 project/plugins.sbt 中避免冗余/重用 ModuleID?

Sbt Plugin 添加依赖到 project/build.sbt