sbt插件 - 如何确保我的settingKey在其他一切之前解决?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sbt插件 - 如何确保我的settingKey在其他一切之前解决?相关的知识,希望对你有一定的参考价值。
我有一个settingKey[Level.Value]
,用于日志级别。我想在其他所有内容之前设置此值,以便将我的日志级别应用于所有内容。
(我知道有一个setLogLevel
但我希望能够设置它,仅适用于我的插件)
如果我的设置名为myLogLevel
,我试图在我的每个任务和设置中调用myLogLevel.value
。
问题似乎是如果我没有使用它的值yield,那么不会执行该设置。
我的设置是这样的:
myLogLevel := {
val theValueSetByTheUser = myLogLevel.value
MyLogLibrary.setLevel(theValueSetByTheUser)
theValueSetByTheUser
}
所以我该怎么做 ?我应该在任何地方打电话给println(myResultLevel)
,以便它被使用。这看起来很傻。
谢谢。
答案
我找到了解决方案:
你需要两个settingKey
。
第一个是:myLogLevel: settingKey[Level.Value]
。
你的插件的消费者可以将它设置为build.sbt
中的任何内容,你可以在你的设置中设置一个默认值:myLogLevel := Level.Info
。
然后,你有第二个设置:myLog: settingKey[Logger]
这不会暴露给消费者,你可以将它定义为:
myLog := {
createLogOfLevel(myLogLevel.value)
}
在您的其他任务和设置中,您现在可以调用:
val log = myLog.value
log.info("message")
以上是关于sbt插件 - 如何确保我的settingKey在其他一切之前解决?的主要内容,如果未能解决你的问题,请参考以下文章
如何在所有项目中收集 SettingKey 的所有值以用于 sbt 插件?