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 插件?

如何根据不同的 sbt 命令设置 SettingKey 的值?

SBT AutoPlugin 缺少添加的工件

如何将任务依赖项从另一个插件添加到我的 SBT 插件?

如何安装 sbt-eclipse 插件?

如何将 sbt pack 插件导入项目