Profile Maven build

This post is also available in: fr

Tools to measure time spent in your Maven builds.

By default Maven measure and display per module and total build time without further details. Hopefully you can use third party tools to profile each executions within your build.

maven-profiler

A tool I wrote some time ago because I didn’t find what I want. I use it to find which step is consuming most of the time and try to reduce the execution time.

It can generate a report (HTML or JSON) written in the .profiler folder inside the project.

maven-profiler

To install it follow instructions available on github.

The report is created when we launch a build with the system property profile:

mvn install -Dprofile

By default, the HTML report is used, to switch for the JSON one:

mvn install -Dprofile -DprofileFormat=JSON

Report example:

{
    "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

This plugin construct a timeline with execution times. Formely developed by David Gageot, it is now maintained by the takari team.

To use it add the following extension in your pom.xml:

<extension>
    <groupId>io.takari.maven</groupId>
    <artifactId>maven-timeline</artifactId>
    <version>1.6</version>
</extension>

Two reports are generated, HTML and JSON.

maven-timeline

{
  "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

Another profiler displaying build times in the console output.

The report is displayed when we launch the build with the system property maven.profile:

mvn install -Dmaven.profile

Result example:

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

Happy profiling !

comments powered by Disqus