Def.sequential and exceptions

问题描述 投票:0回答:1

Def.sequential
允许按顺序执行多个任务:

myTask := {
  Def.sequential(task1, task2, task3)
}

如果

task1
失败(抛出异常),则不会执行剩余的任务。

这与以下内容形成对比,它始终执行所有任务:

myTask := {
  task1.value
  task2.value
  task3.value
}

顺序执行所有这些的最佳方法是什么,即使其中一些失败并报告错误?.

我想执行测试,并知道哪些测试有问题。它们不能并行执行。

sbt
1个回答
0
投票

一个解决方案是:

task1 := doTask1()
task2 := doTask2()
task3 := doTask3()

myTask := {
  val results = Seq(
    Try { doTask1() },
    Try { doTask2() },
    Try { doTask3() }
  )
  results foreach {
    case Failure(e) =>
        sys.error(e.getMessage)
    case _ =>
  }
}

但是对于像

compile
test
这样的内置任务,要知道其实现并不容易。

© www.soinside.com 2019 - 2024. All rights reserved.