在保留范围的同时映射SBT的设置?

时间:2014-06-09 21:25:04

标签: scala sbt

在插件中,我有SettingKey,说:

val age = settingKey[Int]("An age")

用户可以在age的不同范围内定义此build.sbt

age in Somewhere := 13

age in Whatever := 55

现在,在插件中,我想映射所有定义,如下所示:

someOtherKey in ___ := if ((age in ___).value <= 10) "young" else "old"

...对于用户定义___的每个范围age

现在,我事先并不知道范围!

我认为过去曾使用mapReferenced,但在0.13.2中已弃用。现在的方法是什么?

1 个答案:

答案 0 :(得分:1)

好吧,您可以使用派生设置,这是一个高级和未记录的API。我们的想法是,如果存在底层密钥,那么您的设置将自动推送到给定配置中。我们在内部将它用于testOptions之类的东西,但它在0.13系列中还没有完全充实。这是一个例子:

inScope(Global)(Seq(
   Def.derive(someOtherKey := if(age.value <= 10) "young" else "old")
}

您还可以设置派生过滤器,例如您只能将设置导出到项目范围:

inScope(Global)(Seq(
   Def.derive(someOtherKey := if(age.value <= 10) "young" else "old", filter = _.project.isSelect)
}

随意篡改API。正如我所说,这是实验性的,我们仍然在解决问题。