SBT配置扩展与DefaultSettings

时间:2014-04-18 21:44:07

标签: sbt

如果我用

定义SBT配置

val MyConfig = config("my") extend Test

基本上和做

一样

val MyConfig = config("my") val mySettings = inConfig(MyConfig)(Defaults.testSettings)

然后在构建定义中导入mySettings?

1 个答案:

答案 0 :(得分:4)

不,调用extend方法与调用inConfig不同。 extend只返回一个新配置,传入的配置前置extendsConfigs,并且不会引入任何新设置。

MyConfig添加到项目中时,它将成为范围密钥解析路径的一部分:

val MyConfig = config("my") extend Test

val root = (project in file(".")).
  configs(MyConfig)

假设您在sbt shell中键入my:test。由于在test配置下找不到my任务,它将遍历extendsConfigs并检查任务是否在其下可用。它将要点击的第一个是Test,因为我们预先它。您可以通过运行inspect my:test

来检查此问题
root> inspect my:test
[info] Task: Unit
[info] Description:
[info]  Executes all tests.
[info] Provided by:
[info]  {file:/Users/eugene/work/quick-test/sbt-so/}root/test:test
[info] Defined at:
[info]  (sbt.Defaults) Defaults.scala:365
[info] Delegates:
[info]  my:test
[info]  test:test
[info]  runtime:test
[info]  compile:test
[info]  *:test
[info]  {.}/my:test
[info]  {.}/test:test
[info]  {.}/runtime:test
[info]  {.}/compile:test
[info]  {.}/*:test
[info]  */my:test
[info]  */test:test
[info]  */runtime:test
[info]  */compile:test
[info]  */*:test
[info] Related:
[info]  test:test

“提供者”说它被委托给root/test:test。这种机制允许您共享一些设置但覆盖其他设置,但您仍然必须知道作用于任务等的设置的内部连接,因此这是一项棘手的业务。您可能已经知道,但我将链接到Additional test configurations,其中专门讨论了测试配置。