如何分析SBT中任务所花费的时间

dav*_*rez 7 scala sbt

我想知道为什么有时我的构建速度要慢得多.

所以我决定测量长时间运行时间.

运行纯Scala代码时,很容易这样做:

def myMethod() = {
   val initTime = System.currentTimeMillis
   ...
   val elapsedTime = System.currentTimeMillis-initTime
}
Run Code Online (Sandbox Code Playgroud)

但是对于像packageBin或者compile,我的源代码无法改变的任务,我不知道如何测量它,因为我无法控制何时someTask.value运行.

任何提示?

相关问题:

pfn*_*pfn 17

-Dsbt.task.timings=true在启动sbt时添加到您的JAVA_OPTS


Von*_*onC 9

如需更完整的分析,您也可以使用 jrudolph/sbt-optimizer/

sbt-optimizer 是一个实验插件,挂钩到sbt的任务执行引擎,并在任务树运行后提供图形ASCII报告

将插件添加到project/plugins.sbt:

addSbtPlugin("net.virtual-void" % "sbt-optimizer" % "0.1.2")
Run Code Online (Sandbox Code Playgroud)

并在以下项目中启用它:

enablePlugins(net.virtualvoid.optimizer.SbtOptimizerPlugin)
Run Code Online (Sandbox Code Playgroud)

https://raw.githubusercontent.com/jrudolph/sbt-optimizer/master/docs/example-line.png

每个输出行对应于已执行的一个任务.

  • 第一次是此任务运行的总时间.
  • 以绿色显示的第二个时间是实际执行时间.
  • 以红色显示的第三次是任务想要运行但等待全局常春藤锁的时间.
  • 以青色显示的最后一次是任务被阻止等待Ivy下载的时间.