【问题标题】: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有什么区别呢?
哪个更受欢迎,为什么?

【问题讨论】:

    标签: scala sbt


    【解决方案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.scalasbt 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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-07-10
        • 2010-10-02
        • 2011-12-12
        • 2010-09-16
        • 2012-03-14
        • 2012-02-06
        • 2011-02-25
        相关资源
        最近更新 更多