sbt的Build.scala中设置字段的范围是什么?

时间:2014-07-22 21:02:37

标签: scala sbt

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

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

settings字段的范围是ThisBuild吗? Global?特别考虑多项目构建。如果有根聚合项目,那些设置如何流向子项目?

详细说明,在this page它说," .sbt文件中的设置被附加到.scala文件中的设置。"我想知道的是"附加设置"对应于范围 - 土地,因为我在Twitter上看到.scala构建正在出路,我想将我的构建迁移到.sbt配置。

1 个答案:

答案 0 :(得分:3)

.scala build definition您也链接说:

  

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

项目/ 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版本。