Используя Gradle, как я могу напечатать, сколько времени потребовалось для выполнения каждой задачи?
Прямо сейчас для одной из часто используемых целей gradle выходные данные выглядят так:
: DataPlanner: чистый: Общий: чистый: Сервер: чистый: Тренажер: чистый: Util: чистый: Util:compileJava:util: processResources ОБНОВЛЕНИЕ: UTIL: классы: Util:compileTestJava: UTIL:processTestResources: UTIL: testClasses: Util: тест: Util: баночка: Общая: compileJava: common:processResources UP-TO-DATE: общие классы:: Общая:compileTestJava: общие:processTestResources
Как мне заставить его выглядеть примерно так?
: DataPlanner: чистый взял 2 сек: Общий: чистый заняло 2 секунды: Сервер: чистый заняло 3 секунды: Тренажер: чистый заняло 4 секунды: Util: чистый заняло 1 сек...
Если невозможно выполнить каждую задачу для печати ее продолжительности после завершения, печать метки времени будет приемлемой альтернативой.
Есть идеи?
Изменив одно из предложенных решений, которое не сработало для меня, оно сделало следующее:
gradle.taskGraph.beforeTask { Task task ->
task.ext.setProperty("startTime", new java.util.Date())
}
gradle.taskGraph.afterTask { Task task, TaskState state ->
int secs = ( new java.util.Date().getTime() - task.ext.startTime.getTime() ) / 1000
int mins = secs / 60
if ( 4 < secs ) {
int sec = secs - mins * 60
println " -> took " + mins + ( ( 1 == mins ) ? " min " : " mins " ) + sec + ( ( 1 == sec ) ? " sec" : " secs" )
}
}
2 ответа
Вы можете добавить до и после хуков выполнения, чтобы сделать это. Перед выполнением задачи добавьте текущее время в качестве свойства задачи, а затем после выполнения вы можете сравнить текущее время с сохраненным временем.
import java.time.*
gradle.taskGraph.beforeTask { Task task ->
task.ext.setProperty("startTime", Instant.now())
}
gradle.taskGraph.afterTask { Task task, TaskState state ->
println task.name + " took " + Duration.between(task.ext.startTime, Instant.now()).toSeconds() + " seconds"
}
результаты в результате, как это:
$gradle clean
:clean
clean took 0.043000000 seconds
Я не знаю, как вы получили этот конкретный вывод. Тем не менее, вы можете использовать --profile
флаг командной строки, чтобы получить отчет о вашей сборке. Затем вы получите HTML-отчет, расположенный в build/reports/profile, который в Gradle 2.3 выглядит следующим образом:
Вы можете прочитать больше об этом в документации Gradle здесь.
Если вы настаиваете на получении определенного результата, который вы указали, вы можете попробовать использовать beforeTask
а также afterTask
TaskGraph перехватывает, чтобы измерить время и распечатать его. Просто отметьте, что вам нужно быть осторожным в этом случае, если gradle будет выполняться в параллельном режиме.