Карта / Сборка (Maven/Gradle) / Многомодульные проекты

Многомодульные проекты

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

my-app/
├── pom.xml              ← родительский (parent), описывает общие настройки
├── core/
│   └── pom.xml           ← модуль с бизнес-логикой
├── web/
│   └── pom.xml           ← модуль с REST API, зависит от core
└── common/
    └── pom.xml           ← общие утилиты, используются и в core, и в web

Родительский pom.xml перечисляет модули и общие настройки (версии Java, общие зависимости):

<modules>
    <module>core</module>
    <module>web</module>
    <module>common</module>
</modules>
Копнуть глубже

Зачем разбивать на модули:

  • Чёткие границы. web явно зависит от core, а не наоборот — структура проекта показывает архитектуру.
  • Переиспользование. common можно подключить и в core, и в web без копирования кода.
  • Быстрая сборка. Изменил только web — Maven/Gradle может пересобрать только его, а не весь проект целиком (особенно эффективно у Gradle с инкрементальной сборкой).
  • Параллельная работа команды. Разные команды могут отвечать за разные модули, не мешая друг другу.

Зависимость между модулями объявляется как обычная зависимость, только координаты — свои:

<!-- в pom.xml модуля web -->
<dependency>
    <groupId>ru.javaguide</groupId>
    <artifactId>core</artifactId>
    <version>1.0.0</version>
</dependency>
🎤 Закрыл тему, если можешь объяснить:
• что такое многомодульный проект и зачем его так разбивают;
• как один модуль объявляет зависимость от другого (если дошёл до 2-го слоя).