这是我的插件代码。它定义了一个从命令行界面触发的主lint任务,如下所示:sbt api/lint jobs/lint。它调用一些特定于项目的链接器和一些构建范围内的链接器。构建范围内的linter运行scalafix,但是如果我从命令行界面多次调用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
}
)
}发布于 2020-03-28 03:55:18
您可以使用FileFunction.cache方法。虽然这只适用于文件。
https://stackoverflow.com/questions/55303394
复制相似问题