хранилище макет для больших Maven проектов


13

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

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

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

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

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

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

14

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

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

Я ответил на вопрос о макете управления версиями в некоторых деталях with examples at another question, это может иметь отношение к вашей ситуации.


3

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

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

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