即使在 cli 上间接指定了多次,如何让 sbt 只运行一次任务?
Posted
技术标签:
【中文标题】即使在 cli 上间接指定了多次,如何让 sbt 只运行一次任务?【英文标题】:How do I make sbt run a task only once even though it is indirectly specified multiple times on the cli? 【发布时间】:2019-08-13 15:55:17 【问题描述】:这是我的插件代码。它定义了一个从 CLI 触发的主任务lint
,如下所示:sbt api/lint jobs/lint
。它调用了一些特定于项目的 linter 和一些构建范围的 linter。构建范围的 linter 运行 scalafix,但如果我从 CLI 多次调用 lint
,如上所述(对于多个项目),那么 scalafix 会运行多次。
对于给定的sbt
调用,如何使 scalafix(和 scalafixLinter
)只运行一次?我以为 sbt 会缓存任务结果,但它似乎在这里不起作用。
object LinterPlugin extends AutoPlugin
object autoImport
lazy val scalafixLinter = taskKey[Unit]("Run scalafix on all scala code")
lazy val lint = taskKey[Unit]("Run all linters")
override val buildSettings = Seq(
scalafixLinter :=
Def.taskDyn
if (...)
Def.task
// run scalafix
(Compile / scalafix).toTask("").value
(Test / scalafix).toTask("").value
else
Def.task
.all(ScopeFilter(inAnyProject)).value // run on all projects
)
override val projectSettings = Seq(
lint :=
// run all the linters
otherLinters.value
scalafixLinter.value
)
【问题讨论】:
【参考方案1】:您可以使用 FileFunction.cache 方法。虽然这只适用于文件。
【讨论】:
以上是关于即使在 cli 上间接指定了多次,如何让 sbt 只运行一次任务?的主要内容,如果未能解决你的问题,请参考以下文章