【问题标题】:What is the scope on the settings field in sbt's Build.scala?sbt 的 Build.scala 中设置字段的范围是什么?
【发布时间】:2014-07-23 09:29:41
【问题描述】:

如果我有一个项目/Build.scala:

object MyBuild extends Build {
  ...
  override val settings = super.settings ++ Seq(
    foo := "blah",
    bar := 5
  )
}

settings 字段的范围是否为ThisBuildGlobal?特别考虑多项目构建。如果有一个根聚合项目,这些设置如何流向子项目?

详细地说,在this page 中它说,“.sbt 文件中的设置附加到 .scala 文件中的设置。”我想知道“附加设置”在范围域中对应的内容,因为我在 twitter 上看到 .scala 构建即将推出,我想将我的构建迁移到 .sbt 配置。

【问题讨论】:

    标签: scala sbt


    【解决方案1】:

    .scala build definition你也链接说:

    .scala 文件中,您可以将设置添加到Build.settings 以供sbt 查找,它们会自动生成范围。

    project/build.scala

    我们可以测试一下:

    import sbt._, Keys._
    
    object MyBuild extends Build {
      val foo = settingKey[String]("foo")
    
      override val settings = super.settings ++ Seq(
        foo := "foo"
      )
    }
    

    从 shell 运行:

    > inspect foo
    

    你应该得到类似的东西

    > inspect foo
    [info] Setting: java.lang.String = foo
    [info] Description:
    [info]  foo
    [info] Provided by:
    [info]  {file:/Users/x/workspace/helloapp/}/*:foo
    [info] Defined at:
    [info]  /Users/x/workspace/helloapp/project/build.scala:7
    [info] Delegates:
    [info]  *:foo
    [info]  {.}/*:foo
    [info]  */*:foo
    [info] Related:
    [info]  {.}/*:foo
    

    这里的关键是“提供者”,即{file:/Users/x/workspace/helloapp/}/*:foo。请参阅 Scopes 了解有关如何破译该符号的详细信息,但这意味着它的范围仅限于 helloapp 的整个构建。

    【讨论】:

      猜你喜欢
      • 2012-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-09
      • 2012-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多