首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何让sbt只运行一次任务,即使它在cli上被间接指定了多次?

如何让sbt只运行一次任务,即使它在cli上被间接指定了多次?
EN

Stack Overflow用户
提问于 2019-03-22 23:51:53
回答 1查看 169关注 0票数 0

这是我的插件代码。它定义了一个从命令行界面触发的主lint任务,如下所示:sbt api/lint jobs/lint。它调用一些特定于项目的链接器和一些构建范围内的链接器。构建范围内的linter运行scalafix,但是如果我从命令行界面多次调用lint (对于多个项目),那么scalafix也会运行多次。

对于给定的sbt调用,如何使scalafix (和scalafixLinter)只运行一次?我以为sbt会缓存任务结果,但它在这里似乎不起作用。

代码语言:javascript
复制
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
    }
  )
}
EN

回答 1

Stack Overflow用户

发布于 2020-03-28 03:55:18

您可以使用FileFunction.cache方法。虽然这只适用于文件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55303394

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档