Как проводить различные стадии выполнения maven
У меня есть сборка maven, которая очень медленная. Я хотел бы знать, есть ли способ профилировать выполнение maven, чтобы выяснить, какие из них являются наиболее трудоемкими.
Позже я захочу сравнить эти моменты между сборками для более старых версий (которые были быстрее), поэтому они должны быть идеально в формате, который можно сравнить/разделить/украсить.
Ответы
Ответ 1
Эта функция включена в Maven3. Вот связанный билет: https://issues.apache.org/jira/browse/MNG-4639
Если вам нужно сделать то же самое с Maven2, я бы рекомендовал создать собственный плагин, который перехватывает все этапы выполнения (или просто те, которые вам нужно отслеживать).
Ответ 2
Исходным решением является takari maven profiler:
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
Ответ 3
Я просто создаю суть здесь: 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>
(...)
Ответ 4
https://github.com/jcgay/maven-profiler - это удобный инструмент. Его легко настроить и использовать. (Имея что-то вроде этого или EventSpy takari/maven-profiler в ядре Maven в качестве опции, безусловно, будет опрятным; комментарий в https://issues.apache.org/jira/browse/MNG-4639..)