Как рассчитать время различных этапов казни - PullRequest
20 голосов
/ 25 февраля 2011

У меня очень медленная сборка maven.Я хотел бы знать, существует ли способ профилировать выполнение maven, чтобы выяснить, какие этапы являются наиболее трудоемкими.

Позже я хочу сравнить это время между сборками для более старых версий (быстрее), поэтому они должны быть в идеале в формате, который можно сравнивать / анализировать / графически.

Ответы [ 5 ]

5 голосов
/ 26 марта 2018

Это самый быстрый способ:

export MAVEN_OPTS="-Dorg.slf4j.simpleLogger.dateTimeFormat=HH:mm:ss,SSS \
                   -Dorg.slf4j.simpleLogger.showDateTime=true" 
mvn test

Результаты

MAVEN_OPTS="-Dorg.slf4j.simpleLogger.dateTimeFormat=HH:mm:ss,SSS -Dorg.slf4j.simpleLogger.showDateTime=true" mvn test
17:06:07,330 [INFO] Scanning for projects...
17:06:07,447 [INFO] 
17:06:07,447 [INFO] ------------------------------------------------------------------------
17:06:07,448 [INFO] Building bimble-server 0.0.1-SNAPSHOT
17:06:07,448 [INFO] ------------------------------------------------------------------------
17:06:07,747 [INFO] 
17:06:07,748 [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ bimble-server ---

Основано на информации из Блог Стэнли Хилнера:

4 голосов
/ 07 июля 2015

Готовым решением является профилировщик takari maven: https://github.com/takari/maven-profiler

Пример вывода со страницы:

org.apache.maven:maven-core:3.1.2-SNAPSHOT

    clean 176ms
        org.apache.maven.plugins:maven-clean-plugin:2.5 (default-clean) 176ms

    initialize 408ms
        org.codehaus.mojo:buildnumber-maven-plugin:1.2 (create-noncanonicalrev) 349ms
        org.codehaus.mojo:buildnumber-maven-plugin:1.2 (create-buildnumber) 59ms

    generate-sources 408ms
        org.codehaus.modello:modello-maven-plugin:1.8.1 (standard) 369ms
        org.codehaus.modello:modello-maven-plugin:1.8.1 (standard) 28ms
        org.codehaus.modello:modello-maven-plugin:1.8.1 (standard) 11ms

    generate-resources 933ms
        org.apache.maven.plugins:maven-remote-resources-plugin:1.4 (default) 932ms

    process-resources 225ms
        org.apache.maven.plugins:maven-resources-plugin:2.6 (default-resources) 224ms

    compile 4s 522ms
        org.apache.maven.plugins:maven-compiler-plugin:2.5.1 (default-compile) 4s 522ms

    process-classes 6s 880ms
        org.codehaus.mojo:animal-sniffer-maven-plugin:1.6 (check-java-1.5-compat) 5s 814ms
        org.codehaus.plexus:plexus-component-metadata:1.5.5 (default) 946ms
        org.sonatype.plugins:sisu-maven-plugin:1.1 (default) 120ms

    process-test-resources 173ms
        org.apache.maven.plugins:maven-resources-plugin:2.6 (default-testResources) 173ms

    test-compile 818ms
        org.apache.maven.plugins:maven-compiler-plugin:2.5.1 (default-testCompile) 818ms

    process-test-classes 134ms
        org.codehaus.plexus:plexus-component-metadata:1.5.5 (default) 110ms
        org.sonatype.plugins:sisu-maven-plugin:1.1 (default) 23ms

    test 11s 306ms
        org.apache.maven.plugins:maven-surefire-plugin:2.12 (default-test) 11s 306ms

    package 1s 371ms
        org.apache.maven.plugins:maven-jar-plugin:2.4 (default-jar) 502ms
        org.apache.maven.plugins:maven-site-plugin:3.3 (attach-descriptor) 869ms
1 голос
/ 25 февраля 2011

Эта функциональность была включена в Maven3. Вот соответствующий билет: https://issues.apache.org/jira/browse/MNG-4639

Если вам нужно сделать то же самое с Maven2, я бы порекомендовал создать свой собственный плагин, который подключается ко всем фазам выполнения (или только к тем, которые вам нужно отслеживать).

0 голосов
/ 13 июня 2016

https://github.com/jcgay/maven-profiler - аналогичный удобный инструмент.Это легко настроить и использовать.(Имея что-то вроде этого или EventSpy takari / maven-profiler в ядре Maven в качестве опции, безусловно, было бы здорово;

0 голосов
/ 05 ноября 2013

Я просто создаю суть здесь: https://gist.github.com/boly38/7316378

Это пример того, как регистрировать дату и время некоторых шагов жизненного цикла maven .

Конечно, вы можете адаптировать этот пример, чтобы установить собственный формат вывода (и отобразить его на графике ...).

Надеюсь, эта помощь


Выписка:

        <profile>
            <id>stats</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-antrun-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>log_validate</id>
                                <phase>validate</phase>
                                <goals><goal>run</goal></goals>
                                <configuration>
                                    <tasks>
                                        <tstamp><format property="stepTstamp" pattern="dd-HH:mm:ss" locale="en,US" /></tstamp>
                                        <echo file="stats.log" append="true"
                                              message="${line.separator}${line.separator}${stepTstamp} validate${line.separator}"/>
                                    </tasks>
                                </configuration>
                            </execution>
    (...)
                            <execution>
                                <id>log_process_sources</id>
                                <phase>process-sources</phase>
                                <goals><goal>run</goal></goals>
                                <configuration>
                                    <tasks>
                                        <tstamp><format property="stepTstamp" pattern="dd-HH:mm:ss" locale="en,US" /></tstamp>
                                        <echo file="stats.log" append="true"
                                              message="${stepTstamp} process-sources${line.separator}"/>
                                    </tasks>
                                </configuration>
                            </execution>
(...)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...