Какие проблемы с конфигурацией или проблемы могут заставить плагин Maven Assembly работать медленно?

1

Наш многомодульный проект Maven, используемый для сборки 4-6 минут. За последние несколько месяцев он увеличился до 20+ минут за сборку. Один из симптомов заключается в том, что иногда сборка кажется приостановленной до тех пор, пока я не нажму <enter> . Тем не менее, сборка Maven по-прежнему работает отлично (6 минут, без пауз) на нашем сервере сборки.

Команда сборки mvn clean package -D<profile>

Некоторые из наших плагинов включают:

  • PMD
  • FindBugs
  • Сборка
  • Компилятор Thrift
  • jspc-Maven-плагин
  • Maven-заменителем-плагин

Кроме того, у нас есть внутренний репозиторий Nexus.

Обновление: журналы сборки

Локальная компоновка:

[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] Project Parent ............................. SUCCESS [17.703s]
[INFO] Dependencies ............................... SUCCESS [0.109s]
[INFO] Thrift Service ............................. SUCCESS [1:51.141s]
[INFO] Thrift API Client Sample ................... SUCCESS [14.219s]
[INFO] Application ................................ SUCCESS [14:07.984s]
[INFO] Webapps Parent ............................. SUCCESS [1.250s]
[INFO] Webapp A ................................... SUCCESS [27.547s]
[INFO] Webapp B.................................... SUCCESS [20.672s]
[INFO] Webapp C ................................... SUCCESS [1:14.656s]
[INFO] Assembly ................................... SUCCESS [5:47.219s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 24:23.234s
[INFO] Finished at: Fri Jan 27 10:47:38 EST 2012
[INFO] Final Memory: 25M/66M
[INFO] ------------------------------------------------------------------------

Сервер сборки (Team City):

[02:16:31]: [INFO] ------------------------------------------------------------------------
[02:16:31]: [INFO] Reactor Summary:
[02:16:31]: [INFO]
[02:16:31]: [INFO] Project Parent ............................. SUCCESS [3.421s]
[02:16:31]: [INFO] Dependencies ............................... SUCCESS [3.157s]
[02:16:31]: [INFO] Thrift Service ............................. SUCCESS [41.314s]
[02:16:31]: [INFO] Thrift API Client Sample ................... SUCCESS [1.220s]
[02:16:31]: [INFO] Application ................................ SUCCESS [4:09.617s]
[02:16:31]: [INFO] Webapps Parent ............................. SUCCESS [0.323s]
[02:16:31]: [INFO] Webapp A ................................... SUCCESS [12.811s]
[02:16:31]: [INFO] Webapp B ................................... SUCCESS [16.496s]
[02:16:31]: [INFO] Webapp C ................................... SUCCESS [19.011s]
[02:16:31]: [INFO] Assembly ................................... SUCCESS [1:45.872s]
[02:16:31]: [INFO] ------------------------------------------------------------------------
[02:16:31]: [INFO] BUILD SUCCESS
[02:16:31]: [INFO] ------------------------------------------------------------------------
[02:16:31]: [INFO] Total time: 7:33.655s
[02:16:31]: [INFO] Finished at: Wed Jan 25 02:16:31 EST 2012
[02:16:31]: [INFO] Final Memory: 42M/317M
[02:16:31]: [INFO] ------------------------------------------------------------------------

Обновление 2

Вот эмпирический анализ того, где моя сборка проводит большую часть своего времени, используя анализ временной метки, предоставляемый этим bash script: https://gist.github.com/993139

Изображение 174551

Мне кажется, что я могу отключить FindBugs, PMD и Unit Tests для некоторых сборников. Но мне нужна окончательная сборка - Ассамблея. Поэтому позвольте мне сосредоточиться на моем вопросе - что может сделать плагин сборки медленным?

Обновление 3

Как и ожидалось, тесты FindBugs, PMD и unit сокращают сборку более чем на 50%

[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO] 
[INFO] Project Parent .................................... SUCCESS [13.969s]
[INFO] Dependencies ...................................... SUCCESS [0.094s]
[INFO] Thrift Service .................................... SUCCESS [47.125s]
[INFO] Thrift API Client Sample .......................... SUCCESS [11.922s]
[INFO] Application ....................................... SUCCESS [3:10.922s]
[INFO] Webapps parent .................................... SUCCESS [0.468s]
[INFO] Webapp A .......................................... SUCCESS [18.157s]
[INFO] Webapp B .......................................... SUCCESS [18.437s]
[INFO] Webapp C .......................................... SUCCESS [1:00.672s]
[INFO] Assembly .......................................... SUCCESS [3:55.969s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 9:58.609s
[INFO] Finished at: Mon Feb 06 10:21:01 EST 2012
[INFO] Final Memory: 24M/59M
[INFO] ----------------------------------------------------------------------

Я не думаю, что Ассамблея должна занять 4 минуты. Во время этапа сборки я вижу много следующего:

[INFO] --- maven-assembly-plugin:2.2:single (assembly-full) @ assembly ---
[INFO] Reading assembly descriptor: C:\projects\my-project\assembly/src/main/assembly/assembly-full.xml
[INFO] project-2.9.3-SNAPSHOT/config/ already added, skipping
[INFO] project-2.9.3-SNAPSHOT/config/ already added, skipping
[INFO] project-2.9.3-SNAPSHOT/ already added, skipping
[INFO] project-2.9.3-SNAPSHOT/var/ already added, skipping

Повторяется с каждым артефактом сборки. Может ли это как-то стать источником медлительности?

  • 0
    Что означает вывод в конце распечатки сборки maven ... есть заданные времена, которые использовались для каждого модуля, что может быть первым указанием с чего начать ... Сборка, которая приостанавливает и ожидает действия клавиатуры, звучит действительно странно ... Вы используете только mvn clean package / mvn deploy или вы используете mvn site?
  • 0
    Обновленный вопрос с частичным ответом. Конечно, это займет полчаса, чтобы получить распечатку в конце сборки: - \
Показать ещё 7 комментариев
Теги:
maven
build

2 ответа

0
Лучший ответ

Первая рекомендация - выполнить сборку локально и посмотреть консоль. Это должно помочь вам легко идентифицировать плагины, которые занимают больше всего времени.

Из моего воспоминания PMD и FindBugs могут занять значительное количество времени. То же самое касается javadoc для крупных проектов. Другие плагины, о которых вы говорили, я не могу комментировать.

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

А, просто перечитайте свой пост: так происходит на локальных машинах в основном. Что делает локальная машина? Он сталкивается с ситуацией с низкой памятью? Там, где происходят паузы, также может быть указано.

1

Я столкнулся с той же проблемой (40 минут на сборке для моего проекта). Исследование stacktracke показало, что сборка плагинов требует много времени вычислительных зависимостей (вычисление! Не копирование!). Комментирование dependencySet должно значительно ускорить работу, если плагин сборки медленный из-за этого для вашего проекта.

Обходной путь для maven 3.0.x заключается в использовании цели зависимости: копии-зависимости с соответствующей областью перед сборкой плагина, а затем использовать fileSet для включения эти скопированные зависимости в сборку. Это решает проблему производительности за счет некоторого дискового пространства. В моем случае сборка сборки занимает теперь несколько секунд вместо 40 минут.

Для maven 3.2.x до сих пор неизвестно обходное решение, так как он использует этот медленный способ вычисления зависимостей в большем количестве мест и долгое время задерживает замораживание, прежде чем начинать что-либо делать. Это делает maven 3.2.x непригодным для больших проектов.

  • 0
    Привет, можешь поставить свой код здесь? Спасибо.
  • 0
    Нет. Это был коммерческий проект в предыдущей компании, и я не смог создать меньший проект с такими же проблемами сейчас.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню