2013-06-20 62 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