Расположение репозитория для крупных проектов Maven

У меня есть большое приложение (~ 50 модулей), используя структуру, похожую на следующее:

  • Применение
    • Коммуникационные модули
      • Модуль цветной связи
      • Модуль связи SSN
      • и т.д.. коммуникационный модуль
    • Модуль маршрутизатора
    • Сервисные модули
      • Модуль обслуживания голосования
        • Субмодуль веб-интерфейса для голосования
        • Подмодуль голосового коллектора для голосования
        • и т.д.. для голосования
      • Сервисный модуль Quiz
      • и т.д.. модуль

Я хотел бы импортировать приложение в Maven и Subversion. После некоторых исследований я обнаружил, что для этого существуют два практических подхода.

Один использует древовидную структуру, как и предыдущую. Недостатком этой структуры является то, что вам нужна тонна tweaking/hacks, чтобы получить многомодульную отчетность с Maven. Другим недостатком является то, что в Subversion стандартный подход trunk/tags/branches добавляет еще большую сложность в репозиторий.

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

Какой путь вы бы выбрали в долгосрочной перспективе и почему?

Ответы

Ответ 1

У нас есть довольно большое приложение (160+ пакетов OSGi, где каждый комплект является модулем Maven), и урок, который мы узнали, и продолжаем учиться, заключается в том, что квартира лучше. Проблема с семантикой кодирования в вашей иерархии заключается в том, что вы теряете гибкость. Модуль, который на 100% говорит "сообщение" сегодня, может быть частично "сервисом" завтра, а затем вам нужно будет перемещать вещи в своем репозитории, и это разрушит всевозможные скрипты, документацию, ссылки и т.д.

Поэтому я бы рекомендовал плоскую структуру и кодировать семантику в другом месте (например, рабочую область или документацию IDE).

Я несколько раз ответил на вопрос о макете управления версиями с примерами по другому вопросу, это может иметь отношение к вашей ситуации.

Ответ 2

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

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

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