【发布时间】: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
}
)
}
【问题讨论】: