Maven
Тема дорожной карты · Java
Apache Maven — стандартный инструмент автоматизации сборки и управления зависимостями для Java-проектов, использующий декларативный pom.xml (Project Object Model) для описания структуры проекта, зависимостей, плагинов и жизненного цикла сборки. Maven организует процесс сборки в чётко определённые фазы — validate, compile, test, package, verify, install и deploy, — выполняемые последовательно через инструмент командной строки mvn, входящий в инструментарий JDK. Центральное место в Apache Maven занимает механизм разрешения зависимостей, загружающий транзитивные зависимости из Maven Central или частных репозиториев Nexus/Artifactory и обеспечивающий воспроизводимые сборки на машинах разработчиков и в CI-окружениях с JDK 11, 17 или 21. Apache Maven нативно интегрируется с родительским POM Spring Boot (spring-boot-starter-parent), Hibernate, JPA, JUnit 5 и Testcontainers через управляемые версии зависимостей и предварительно сконфигурированные выполнения плагинов, значительно снижая накладные расходы на конфигурацию сборки. Хотя Gradle предлагает альтернативу на основе DSL Groovy/Kotlin, Apache Maven остаётся выбором по умолчанию для корпоративных Java-проектов благодаря философии convention-over-configuration и многолетней поддержке экосистемы.
Как это работает
Maven — это Maven (самый популярный, XML-based pom.xml) или Gradle (Groovy/Kotlin DSL, быстрее, гибче). Оба управляют зависимостями (Maven Central — канонический репо), компилируют, гонят тесты, пакетируют JAR / WAR, публикуют в репо. Wrapper-скрипты (mvnw, gradlew) обеспечивают использование запинненной версии. Multi-module проекты + Bill of Materials (BOM) — для выравнивания версий между модулями.
Когда применять
Maven — если команда ценит конвенцию + стабильность; Gradle — для больших multi-module сборок, где Maven медленный. Всегда wrapper (mvnw / gradlew); не полагайтесь на глобальный Maven/Gradle. Пиннинг версий; dependency-check / OWASP-плагин — для выявления CVE. mvn dependency:tree / gradle dependencies периодически — для замечания дрейфа версий.
Типичные ошибки
Ловушки Maven: SNAPSHOT-зависимости в production (невоспроизводимые сборки); не закоммичен wrapper (mvnw/gradlew) — новые инженеры видят несовпадение версий; transitive-конфликты (mvn dependency:tree показывает); долгие Gradle-сборки без configuration cache + build cache (gradle 7+).