Des outils pour mesurer en détail le temps de build de chaque exécution d’un build Maven.
Par défaut Maven ne mesure que le temps par module et total du build sans donner de temps intermédiaire.
Il existe heuresement des solutions pour obtenir les temps d’éxécutions de chaque étape de son build.
maven-profiler
Un outil que j’ai écris à l’époque car je n’en avais pas trouvé. Je m’en sers pour trouver quels étapes d’un build optimiser pour réduire son temps d’exécution.
Il génère un rapport (HTML ou JSON) archivé dans le dossier .profiler
au sein du projet.
Pour l’installer il suffit de suivre les instructions disponibles sur github.
Le rapport est généré quand on lance un build avec la propriété système profile
:
mvn install -Dprofile
Par défaut le rapport HTML est utilisé, pour avoir le modèle JSON :
mvn install -Dprofile -DprofileFormat=JSON
Exemple de rapport :
{
"name": "maven-profiler",
"goals": "clean install",
"date": "2015/01/17 15:28:49",
"parameters": "{profile=true, profileFormat=JSON}",
"projects": [{
"project": "maven-profiler",
"time": "6.793 s",
"mojos": [{
"mojo": "org.apache.maven.plugins:maven-surefire-plugin:2.18:test {execution: default-test}",
"time": "2.512 s"
}, {
"mojo": "org.apache.maven.plugins:maven-shade-plugin:2.3:shade {execution: default}",
"time": "1.458 s"
}, {
"mojo": "org.codehaus.gmavenplus:gmavenplus-plugin:1.2:testCompile {execution: default}",
"time": "818.3 ms"
}, {
"mojo": "org.apache.maven.plugins:maven-compiler-plugin:3.2:compile {execution: default-compile}",
"time": "538.7 ms"
}, {
"mojo": "org.apache.maven.plugins:maven-source-plugin:2.4:jar-no-fork {execution: attach-sources}",
"time": "248.5 ms"
}, {
"mojo": "org.apache.maven.plugins:maven-jar-plugin:2.5:jar {execution: default-jar}",
"time": "238.2 ms"
}, {
"mojo": "org.apache.maven.plugins:maven-resources-plugin:2.7:resources {execution: default-resources}",
"time": "171.7 ms"
}, {
"mojo": "org.codehaus.plexus:plexus-component-metadata:1.6:generate-metadata {execution: default}",
"time": "170.5 ms"
}, {
"mojo": "org.apache.maven.plugins:maven-enforcer-plugin:1.2:enforce {execution: enforce-maven}",
"time": "126.0 ms"
}, {
"mojo": "org.apache.maven.plugins:maven-clean-plugin:2.6.1:clean {execution: default-clean}",
"time": "76.11 ms"
}, {
"mojo": "org.apache.maven.plugins:maven-install-plugin:2.5.2:install {execution: default-install}",
"time": "53.95 ms"
}, {
"mojo": "org.apache.maven.plugins:maven-compiler-plugin:3.2:testCompile {execution: default-testCompile}",
"time": "2.850 ms"
}, {
"mojo": "org.apache.maven.plugins:maven-resources-plugin:2.7:testResources {execution: default-testResources}",
"time": "2.518 ms"
}]
}]
}
maven-timeline
Ce plugin présente les temps de construction de chaque phase au sein d’un build sous la forme d’un timeline. Initialement développé par David Gageot, il en existe un fork maintenu par l’équipe de takari.
Pour l’utiliser il fait ajouter une extension dans le fichier pom.xml
:
<extension>
<groupId>io.takari.maven</groupId>
<artifactId>maven-timeline</artifactId>
<version>1.6</version>
</extension>
Deux rapports sont générés, un en HTML et un en JSON.
{
"start": "2015-02-01T19:18:18.738Z",
"end": "2015-02-01T19:18:21.770Z",
"dateTimeFormat": "iso8601",
"events": [
{
"start": "2015-02-01T19:18:20.940Z",
"end": "2015-02-01T19:18:21.095Z",
"duration": 2380,
"description": "com.github.jcgay.maven.color:maven-color-logback:package:jar:default-jar (2380 ms)",
"trackNum": 1,
"color": "blue",
"durationEvent": true
},
{
"start": "2015-02-01T19:18:19.136Z",
"end": "2015-02-01T19:18:19.545Z",
"duration": 830,
"description": "com.github.jcgay.maven.color:maven-color-core:compile:compile:default-compile (830 ms)",
"trackNum": 2,
"color": "blue",
"durationEvent": true
},
{
"start": "2015-02-01T19:18:19.562Z",
"end": "2015-02-01T19:18:19.564Z",
"duration": 849,
"description": "com.github.jcgay.maven.color:maven-color-agent:test-compile:testCompile:default-testCompile (849 ms)",
"trackNum": 3,
"color": "blue",
"durationEvent": true
},
{
"start": "2015-02-01T19:18:19.677Z",
"end": "2015-02-01T19:18:19.818Z",
"duration": 1103,
"description": "com.github.jcgay.maven.color:maven-color-agent:package:jar:default-jar (1103 ms)",
"trackNum": 3,
"color": "blue",
"durationEvent": true
},
...
{
"start": "2015-02-01T19:18:20.801Z",
"end": "2015-02-01T19:18:21.549Z",
"duration": 2834,
"description": "com.github.jcgay.maven.color:maven-color-log4j2:package:single:make-assembly (2834 ms)",
"trackNum": 3,
"color": "blue",
"durationEvent": true
}
]
}
tesla-profiler
Un autre profiler qui affiche les temps de build dans la console.
Le rapport est généré quand on lance un build avec la propriété système maven.profile
:
mvn install -Dmaven.profile
Un exemple de résultat :
com.github.jcgay.maven:maven-profiler:2.2-SNAPSHOT
clean 81ms
org.apache.maven.plugins:maven-clean-plugin:2.6.1 (default-clean) 80ms
validate 145ms
org.apache.maven.plugins:maven-enforcer-plugin:1.2 (enforce-maven) 145ms
process-resources 198ms
org.apache.maven.plugins:maven-resources-plugin:2.7 (default-resources) 198ms
compile 588ms
org.apache.maven.plugins:maven-compiler-plugin:3.2 (default-compile) 588ms
process-classes 209ms
org.codehaus.plexus:plexus-component-metadata:1.6 (default) 209ms
process-test-resources 3ms
org.apache.maven.plugins:maven-resources-plugin:2.7 (default-testResources) 3ms
test-compile 1s 2ms
org.apache.maven.plugins:maven-compiler-plugin:3.2 (default-testCompile) 3ms
org.codehaus.gmavenplus:gmavenplus-plugin:1.2 (default) 998ms
test 2s 670ms
org.apache.maven.plugins:maven-surefire-plugin:2.18 (default-test) 2s 669ms
package 2s 778ms
org.apache.maven.plugins:maven-jar-plugin:2.5 (default-jar) 250ms
org.apache.maven.plugins:maven-source-plugin:2.4 (attach-sources) 270ms
org.apache.maven.plugins:maven-shade-plugin:2.3 (default) 2s 258ms
Bon profiling !