Как рассчитать время на разных этапах выполнения maven

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

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


person Carles Barrobés    schedule 25.02.2011    source источник
comment
Обычно я включаю отметки относительного времени в настройках журнала maven. Это не занимает много места в сообщениях и помогает увидеть медленные шаги. org.slf4j.simpleLogger.showDateTime = true   -  person eckes    schedule 07.06.2017


Ответы (5)


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

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

person Yuriy Nemtsov    schedule 25.02.2011
comment
ага, maven2. Есть ли указатель на отправную точку для этого типа плагина? - person Carles Barrobés; 25.02.2011
comment
из вашей ссылки я видел, что Хадсон дает мне эту информацию, и это действительно так даже для Maven 2, проверяя выполненные mojos - person Carles Barrobés; 25.02.2011
comment
О, классно. Я думал, что для этого Хадсону / Дженкинсу нужна поддержка maven3. - person Yuriy Nemtsov; 25.02.2011
comment
Действительно красиво. К сожалению, время сборки на сервере отличается от времени сборки на моей локальной машине для прямого выполнения maven ... и я до сих пор не могу рассчитать их там, где некоторые невинные шаги, похоже, занимают гораздо больше времени, чем на сервере - person Carles Barrobés; 26.02.2011
comment
@ Джордж: у вас есть опыт написания таких плагинов для maven? если вы передадите мне ссылку на какой-нибудь хороший учебный документ, я наконец приму ваш ответ;) - person Carles Barrobés; 05.03.2011
comment
Хех, начните с руководства по разработке плагинов. Затем ознакомьтесь с спецификациями API и выполнение в несколько этапов. - person Yuriy Nemtsov; 05.03.2011
comment
@ Джордж, меня сбил с толку этот билет. Он все еще открыт и не назначен. Когда вы говорите, что он «включен в Maven3», что именно должен делать конечный пользователь? - person artbristol; 10.06.2011
comment
@artbristol, ты прав. Очевидно, что в Maven нет такой функциональности. Вы должны написать свой собственный AbstractExecutionListener или EventSpy. EventSpy, упомянутый там Джейсоном ван Зилом, выглядит неполным. Сборки, начинающиеся с -T, не поддерживаются. - person rwitzel; 18.03.2014
comment
Если кто-то захочет использовать его для проекта Jenkins Maven - имейте в виду, что вы не можете. Расширения Maven Core не поддерживаются issues.jenkins-ci.org/browse/JENKINS-28629 < / а> - person Jakub Bochenski; 07.12.2016

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

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

Если вы затем добавите эту переменную среды в файл конфигурации вашей оболочки (например, ~/.bashrc или ~/.profile), у вас будут эти значения времени каждый раз, когда вы используете Maven.

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

person oligofren    schedule 26.03.2018
comment
Спасибо, блог помог. - person kolobok; 29.08.2018
comment
Очень простой! Это все, что мне нужно для сроков сборки нескольких проектов. - person Wheezil; 23.03.2021

Готовое решение - профилировщик 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
person Gábor Lipták    schedule 07.07.2015
comment
@ShintaSmith: в чем проблема? - person Gábor Lipták; 05.11.2015
comment
Он просто не производит никакого профилирования. - person Shinta Smith; 10.11.2015
comment
Вы поместили его банку в $ {M2_HOME} / lib / ext? - person Gábor Lipták; 12.11.2015
comment
@qtips рад слышать - person Gábor Lipták; 20.10.2016
comment
У меня много [ПРЕДУПРЕЖДЕНИЕ] Не удалось уведомить шпиона io.tesla.lifecycle.profiler.LifecycleProfiler: null, используя его с Maven 3.3.9 и создавая многокомпонентные компоненты с помощью -T. Итоговый отчет бесполезен - person Gurvan; 29.11.2016

https://github.com/jcgay/maven-profiler - похожий удобный инструмент. Легко настроить и использовать. (Было бы неплохо иметь что-то вроде этого или EventSpy takari / maven-profiler в ядре Maven в качестве опции; комментарий в https://issues.apache.org/jira/browse/MNG-4639 ..)

person vorburger    schedule 13.06.2016
comment
у этого профилировщика есть проблемы с многомодульными сборками, а также он не поддерживает -T - см. проблемы на github - person Jakub Bochenski; 07.12.2016

я просто создаю суть здесь: 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>
(...)
person boly38    schedule 05.11.2013