如果我用
定义SBT配置 val MyConfig = config("my") extend Test
基本上和做
一样 val MyConfig = config("my")
val mySettings = inConfig(MyConfig)(Defaults.testSettings)
然后在构建定义中导入mySettings?
答案 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,其中专门讨论了测试配置。