2013-06-20 72 views
10

我有一个需要时间的构建。它很庞大而且很复杂,很难知道从哪里开始清理它。似乎sbt保留了大量关于构建结构的元数据,具有相互依赖性,命名任务,范围界定等。有了这些元数据,看起来很容易就可以轻松地进入并测量每个不同的任务和范围需要多少时间。这样做代码而不是基于日志消息不仅感觉更清晰,而且具有处理并发构建和其他复杂的东西的好处,可能会导致日志时间误导。剖析sbt构建

目前有没有什么设施可以做到这一点?它并不像我们在“用户”构建中可以做的那样,但是也许SBT插件可以挂钩任务启动器并在最后维护/产生大量计时报告。这真的会帮助我将精力集中在改善缓慢的事情上,而不会浪费时间在瞬间发生的事情上。

回答

3

前段时间我有完全相同的问题。看源代码https://github.com/sbt-android-mill/sbt-android-mill

这里公布 - https://groups.google.com/forum/#!msg/scala-on-android/TsmmJA4uvQ4/LMvAxuovXoMJ注意SBT日志中的时间字段。

几乎没有包装+像秒表(依赖),你会有吸引力的HTML报告与分析统计。

+0

谢谢!我尝试阅读代码,但无法立即理解你在做什么来完成这项工作。你只是定义了一个规范化的规范项目结构,或者你找到了一种方法来钩住sbt,这样你就可以定时任意构建?我的问题是我已经有了一个庞大的版本,我想在不添加秒表呼叫到每个任务(包括sbt的预定义)的情况下进行配置。你的方法处理了吗? – copumpkin

+0

我在_sbt/android/mill/Mill.scala_中定义'totalStopwatch','profilingGroups',并用'stopwatchGroup(“blabla”){code}'包装我自己的代码。 编译Configurations.Compile << =编译Configurations.Compile dependsOn compileStageCorePre' - 启动秒表和 'compileStageCore <编译器编译器<编译器编译器<编译器编译器><= compileStageCore dependsOn(compileStagePrepare,在Configurations.Compile中编译)' - 停止秒表。它是_Compile.scala_ 底部的一行任务注意'taskPre'和'taskPost'方法。 – Ezhik

+0

如果你有真正复杂的项目恕我直言,最好花一些时间来增加分析和优化它浪费一个月一个月的时间。 – Ezhik