Профилирование Maven - PullRequest
11 голосов
/ 13 июля 2011

Существуют ли инструменты для профилирования самого процесса сборки Maven, чтобы я мог видеть, на что сборка тратит больше всего времени?

У нас возникают проблемы в работе с Maven 3.0.3 и 3.0b1,Наш проект строится намного быстрее под 3.0b1 (3м30 с) по сравнению с 3.0.3 (9м00 с).С 3.0b1 сборка примерно на 63% быстрее (если моя математика верна).

Я пытался найти сравнение производительности и проблемы с производительностью, связанные с Maven 3, но не смог ничего найти.

ОБНОВЛЕНИЕ

Я провел еще несколько исследований, изучив источники maven, и вот что я обнаружил:

При использовании jconsole я видел, что большую часть времени (в 3.0.3) расходуется внутри DefaultProjectDependenciesResolver.java.Поэтому я загрузил исходный код в версии 3.0b1 и 3.0.3, чтобы посмотреть, что происходит.Я заметил, что в 3.0.3 есть две версии класса.Один находится в org.apache.maven.project, а другой - в org.apache.maven.Похоже также, что в 3.0.3 используется первый.Проходя по коду, я увидел, что большая часть времени тратится, когда он достигает этого утверждения:

node = repoSystem.collectDependencies( session, collect ).getRoot();

В 3.0b1 код делает:

ArtifactResolutionResult result = repositorySystem.resolve( request );

Я также заметилrespositorySystem относится к типу RepositorySystem, а конкретная реализация - LegacyRepositorySystem.Я предполагаю, что это использовалось, пока Maven 3 находился в бета-версии, пока не была создана новая реализация?Возвращаясь к 3.0.3, метод collectDependencies живет в DefaultRepositorySystem.java, который является частью org.sonatype.aether.impl.internal.Это в конечном итоге вызывает collectDependencies внутри DefaultDependencyCollector.java, который также является частью org.sonatype.aether.impl.internal.Я предполагаю, что именно так строится граф зависимостей.

Теперь мне интересно, из-за того, как структурированы наши зависимости.Кто-нибудь видел такое поведение раньше?

ОБНОВЛЕНИЕ

В JIRA есть проблема об этой проблеме вместе с предлагаемым исправлением.Я разместил детали в качестве ответа.

ОБНОВЛЕНИЕ

Проблема связана с версией эфира, которая используется в Maven 3.0.3 (1.11).Версия 1.12 эфира исправляет эту проблему.Я проверил исходный код на maven 3.0.3 и отредактировал POM, чтобы изменить версию эфира с 1.11 на 1.12.Затем я собрал maven из исходного кода и заменил мою текущую версию версией, которую я создал.Сокращается время сборки.

Если вы не хотите собирать maven из исходного кода, вы можете заменить эфирные библиотеки, которые находятся в каталоге lib maven, на версию 1.12.Это также должно работать.

Я не уверен, что это изменение войдет в 3.0.4, потому что разработчики Maven сказали, что есть изменения в лицензировании, переходящие с эфира 1.11 на эфир 1.12, и такони все еще обсуждают это.

Ответы [ 2 ]

5 голосов
/ 15 июля 2011

Maven - это простое Java-приложение, поэтому я предлагаю запустить его с помощью инструмента профилирования, такого как YourKit или JProfiler , и проанализировать его производительность во время выполнения.Вы также можете использовать JVisualVM для извлечения информации о производительности во время выполнения.


В целом, я считаю, что разработчикам Maven было бы интересно узнать об этой регрессии производительности.Пожалуйста, откройте заявку в Maven Jira или пост в списке Maven разработчиков

2 голосов
/ 07 октября 2013

Что касается общего вопроса о профилировании сборок Maven, то существует проблема Codehaus JIRA , которая предоставляет исправление для вывода времени выполнения Mojos.К сожалению, он еще не был включен в Maven.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...