У нас большой проект Java 8 Spring Hibernate Maven, который становится все больше.Java-проект становится слишком большим
Проблемы:
- время сборки составляет 10-12 минут в лучшем случае; 3 минуты без тестов
- У нас уже есть переключатель командной строки, чтобы пропускать редко модифицированные модули, что является симптомом процесса сборки, достигающим практических пределов.
- Eclipse пытается управлять проектом (хотя IntelliJ в порядке)
- Вещи ухудшаются по мере роста проекта, и по мере того как больше сценариев из тестовой команды получают в качестве интеграционных тестов в базе кода.
Как мы работаем в настоящее время
- Проект выполнен в около 20 модулей Maven, например, так:
Parent |--- Tier1 |--- Tier2 |--- WebTier |---- ModuleA |---- ModuleB |---- ModuleC |---- ... |---- Entities |---- Shared |---- Batch |---- IntegrationTests
- Приложение построено как единая ВОЙНЫ
- Разработчики развертывают единый уровень (typicall y
WebTier
) как артефакт от Eclipse или IntelliJ к их местному Tomcat - Хотя проект кажется красиво разделенным в модулях, между ними есть много нежелательных точек соединения. Специально в
Shared
, где модули, нуждающиеся в «кросс-модули» доступ положить свои услуги - Все интеграционные тесты находятся в специальном модуле (не знаю, почему)
Идеи, чтобы сделать его лучше
- Добавить модуль
MessageBroker
, чтобы обеспечить свободное соединение, если это необходимо. Может быть, JMS, или просто тупой компонент в памяти для синхронной связи - Избавиться от
Shared
модуля - Убедитесь, что модули имеют крупнозернистый начальный точки
- Удалить нежелательную связь между братьями и сестрами и предпочитают сообщение брокер когда возможно
- Возможно сохранение
Entities
. По крайней мере, основные компании (Customer, CustomerFile, ...). Но некоторые сущности, очевидно, принадлежат к одному модулю (а информация исполнения партии будет вBatch
модуле)
Таким образом, любой желающий сделать изменения в ModuleA
бы большую часть времени только строить и запускать тесты в этом модуле без опасаясь разорвать заявку.
Вопросы
- ли это, кажется, как хороший план?К счастью, я имею в виду будущие доказательства с хорошими шансами улучшить ситуацию и не требуя чрезмерного объема работы, учитывая ситуацию.
- Если у нас есть 1 проект Eclipse/IJ на уровне, дайте IDE построить артефакт и развернуть его для Tomcat, или у нас есть 1 проект на модуль и зависимости от Nexus? Или, может быть, последний вариант является излишним?
- Любые другие предложения?
Некоторые показатели
- для Windows 7, Java 8, Maven 3.0.3, TestNG.
- SSD или HDD 7200rpm (ограниченное воздействие)
- 6Gb RAM
- Heap 1Gb (специалист)
- CI с Дженкинс
Благодаря кучу!
Похоже, вам может понадобиться большая куча или больше ОЗУ (или и то и другое). –
Можете ли вы дать немного больше информации о размере проекта? На самом деле всего 20 модулей maven и время сборки 10-13 минут (звучит крайне медленно). Сколько тестов выполняется? Как долго проходят тесты? Какую версию Maven вы используете? Сколько строк кода (измерение SonarQube?) Вы используете решение CI, например, jenkins? О каком переключателе командной строки вы говорите? У вас есть специальная машина для сборки? Сколько RAM/CPU и т. Д. И какой жесткий диск имеет этот аппарат? Сколько RAM/CPU имеет рабочая станция? Какая операционная система? – khmarbaise
@khmarbaise Переключатель командной строки - это «-DskipSomeModules», соответствующий профилю maven, чтобы пропустить некоторые из редко используемых модулей. Ничего особенного здесь, просто причуда, которая показывает, что мы не делаем это правильно ИМО. У нас есть CI с Дженкинсом, но здесь это не имеет значения: это болит местный разработчик, и это может быть сделано только путем создания полной WAR из-за частых связей. Вернемся к вам с запрошенной информацией завтра. Спасибо. – youri