Профилирование sbt builds

У меня есть сборка sbt, которая занимает много времени. Это большой и сложный, и трудно понять, с чего начать его чистку. Похоже, что sbt сохраняет много метаданных о структуре сборки, с взаимозависимостями, именованными задачами, областью определения и т.д. Со всеми этими метаданными кажется, что было бы довольно легко вскочить и измерить, сколько времени занимает каждая отдельная задача с объемом. Выполнение этого в коде, а не на основе сообщений журнала, не только чувствует себя более чистым, но и имеет преимущество в том, что оно прекрасно сочетается с параллельными сборками и другими сложными вещами, которые могут привести к ошибочным результатам журнала.

Есть ли какие-либо возможности для этого? Он не чувствует себя чем-то, что мы могли бы сделать в "пользовательской" сборке, но, возможно, плагин SBT мог бы подключить стартер задачи и поддерживать/составлять большой отчет о таймингах в конце. Это действительно помогло бы сосредоточить мои усилия на улучшении медленных вещей, не теряя времени на вещи, которые происходят мгновенно.

Ответ 1

У меня была совершенно такая же проблема некоторое время назад. Посмотрите исходный код https://github.com/sbt-android-mill/sbt-android-mill

Здесь объявляется - https://groups.google.com/forum/#!msg/scala-on-android/TsmmJA4uvQ4/LMvAxuovXoMJ Обратите внимание на поле времени в журнале SBT.

Несколько оберток + что-то вроде секундомера (в зависимостях), и у вас будут привлекательные HTML-отчеты с профилирующей статистикой.