【问题标题】:Run task multiple times in SBT在 SBT 中多次运行任务
【发布时间】:2017-06-24 16:20:30
【问题描述】:

我想在我的 sbt 构建中多次运行我的任务。

lazy val sampleTask = taskKey[Unit]("A sample task.")

val dynamic = Def.taskDyn {
    println("Called dynamic")
    Def.task {
      println("Executing dynamic task")
    }
}

lazy val library = (project in file("library")).
settings(
 sampleTask := {
   for (i <- (1 until 4)) {
     println(s"Loop $i")
     val num = dynamic.value
   }
 }
)

SBT 默认缓存任务的执行,结果我得到:

Called dynamic
Executing dynamic task
Loop 1
Loop 2
Loop 3

我想每次调用动态任务时都运行它,所以我得到:

Called dynamic
Executing dynamic task
Loop 1
Called dynamic
Executing dynamic task
Loop 2
Called dynamic
Executing dynamic task
Loop 3

是否可以强制 sbt 在一次构建中多次运行相同的任务?

【问题讨论】:

  • 您想每次都运行动态任务及其所有依赖项还是只运行动态任务?
  • 我想运行 N 次测试,每次测试运行后将测试结果复制到单独的文件夹。运行测试 N 次后,我将处理所有结果以找到不稳定的测试。所以,我想每次都运行任务及其依赖项。
  • 我认为您需要编写命令而不是任务。 scala-sbt.org/0.13/docs/Commands.html

标签: scala sbt


【解决方案1】:

感谢@seth-tisue 发表评论。我创建了命令并且多次调用任务:https://github.com/otrebski/sbt-flaky/commit/308a5dd34afbcbfcc4da9a71ec16b20e0c168ec0#diff-fba3577a701d9ead931278034fe240a6

def flaky = Command("flaky")(parser) {(state,args) =>
  val taskKey = Keys.test in Test
  for (i <- (1 to count)) {
    println(s"Running tests: $i")
    Project.runTask(taskKey, state)
  }
}

【讨论】:

    猜你喜欢
    • 2017-08-19
    • 2014-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-04
    • 2016-02-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多