Существуют ли инструменты, которые будут обрабатывать сам процесс сборки Maven, чтобы я мог видеть, где сборка тратит больше времени?
У нас возникают проблемы с работой над Maven 3.0.3 и 3.0b1. Наш проект развивается намного быстрее, чем 3.0b1 (3m30s) по сравнению с 3.0.3 (9m00s). С 3.0b1 сборка примерно на 63% быстрее (если моя математика права).
Я попытался найти сравнения производительности и производительности в отношении Maven 3, но не смог ничего найти.
UPDATE
Я сделал еще несколько исследований, посмотрев на источники 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
. Я предполагаю, что так построен граф зависимостей.
Теперь мне интересно, из-за того, как структурируются наши зависимости. Кто-нибудь видел такое поведение раньше?
UPDATE
В JIRA существует проблема , а также предлагаемое исправление. Я отправил детали в качестве ответа.
UPDATE
Проблема связана с версией эфира, используемой в 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, и поэтому они все еще обсуждают его.