Существуют ли инструменты для профилирования самого процесса сборки 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, и такони все еще обсуждают это.