Сборка и зависимости
Тема дорожной карты · Java
Инструменты сборки Java автоматизируют полный жизненный цикл доставки программного обеспечения — компиляцию, разрешение зависимостей, тестирование, упаковку и деплой, — заменяя подверженные ошибкам ручные вызовы javac воспроизводимыми, декларативными конвейерами. Maven, наиболее широко используемый инструмент сборки Java, применяет модель convention-over-configuration с дескриптором pom.xml и фиксированным жизненным циклом фаз (validate → compile → test → package → install → deploy), разрешая зависимости из Maven Central или частных репозиториев Nexus/Artifactory. Gradle расширяет это с помощью файла build.gradle на DSL Groovy или Kotlin, инкрементального кэша сборки и движка параллельного выполнения задач, который может значительно сократить время сборки для многомодульных проектов — он является системой сборки по умолчанию для Android и Spring Boot Initializr. Apache Ant, предшественник обоих, использует XML-файлы build.xml с явными графами задач и остаётся в унаследованных кодовых базах, однако не предлагает встроенного управления зависимостями без сопутствующего инструмента Ivy. Выбор правильного инструмента сборки Java влияет на скорость CI/CD-конвейера, сканирование безопасности зависимостей и лёгкость интеграции статического анализа, покрытия кода (JaCoCo) и задач контейнеризации (Jib).
Как это работает
Сборка и зависимости — это 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 периодически — для замечания дрейфа версий.
Типичные ошибки
Ловушки Сборка и зависимости: SNAPSHOT-зависимости в production (невоспроизводимые сборки); не закоммичен wrapper (mvnw/gradlew) — новые инженеры видят несовпадение версий; transitive-конфликты (mvn dependency:tree показывает); долгие Gradle-сборки без configuration cache + build cache (gradle 7+).