SBT在挂钩之前/之后执行任务

时间:2012-09-10 23:56:33

标签: scala sbt

(转自here

我正在尝试测量/记录任务的运行时间。

我通过在之前添加一个任务并在之后添加一个任务来查看“包装”任务,但这不会每次都有效,因为sbt仅保证部分订单。

更好的包装将是这样的:

wrappedTask := {
  startMeasuringTime()
  somehowInvoke(myTaskKey in SomeContext)
  endMeasuringTime()
}

这个“somehowInvoke”应该是什么?

1 个答案:

答案 0 :(得分:3)

测量任务所需的时间需要来自任务执行者的支持。 正如您所暗示的那样,您不能仅通过使用任务原语来执行此操作。 我推了一些我写过的sample code,显示了这个想法。

示例代码无法处理的复杂因素是用户在概念上认为是一个任务(例如,编译)可能实际上被实现为多个任务,并且需要组合这些时序。此外,像internalDependencyClasspath这样的任务调用“其他任务(flatMap)”,因此其执行时间包括“被调用”任务的执行时间。

编辑:这是作为602c1759a18851cc2f57e158389759中的实验性功能实现的0.13.0。 ExecuteProgress接口提供了足够的信息,以前描述的问题不是问题。