在插件中,我有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
中已弃用。现在的方法是什么?
答案 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。正如我所说,这是实验性的,我们仍然在解决问题。