Профилирование Maven

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

У нас есть проблемы в работе с Maven 3.0.3 и 3.0 b1. Наш проект строится намного быстрее при 3.0b1 (3m30s) по сравнению с 3.0.3 (9m00s). С 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 из исходных текстов, вы можете заменить библиотеки эфира, которые находятся в каталоге maven lib, версией 1.12. Это тоже должно сработать.

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

11
задан Vivin Paliath 20 July 2011 в 23:29
поделиться