Ответ
В современных Java-проектах зависимости управляются системами сборки и менеджерами зависимостей, которые автоматически загружают библиотеки из репозиториев.
Основные инструменты:
-
Maven:
- Зависимости объявляются в файле
pom.xmlв секции<dependencies>. - Maven загружает артефакты (JAR-файлы) и их транзитивные зависимости из удалённых репозиториев (по умолчанию — Maven Central).
<!-- pom.xml --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>3.1.5</version> </dependency>
- Зависимости объявляются в файле
-
Gradle:
- Зависимости объявляются в файле
build.gradleилиbuild.gradle.kts.// build.gradle dependencies { implementation 'org.springframework.boot:spring-boot-starter-web:3.1.5' }
- Зависимости объявляются в файле
Процесс загрузки:
- Вы указываете зависимость в конфигурационном файле (groupId, artifactId, version).
- Инструмент сборки (Maven/Gradle) обращается к конфигурируемому репозиторию.
- Результат: Библиотеки скачиваются в локальный кэш на вашей машине (обычно
~/.m2/repositoryдля Maven или~/.gradle/cachesдля Gradle) и включаются в classpath проекта.
Ключевые концепции:
- Транзитивные зависимости: Зависимости ваших зависимостей загружаются автоматически.
- Скоупы (Scopes): Определяют, когда и для чего нужна зависимость (
compile,runtime,test,provided).<scope>test</scope> <!-- Зависимость только для тестов --> - Репозитории: Можно использовать публичные (Maven Central, JCenter) или приватные корпоративные репозитории (Nexus, Artifactory).
- Конфликты версий: Maven/Gradle разрешают конфликты, выбирая одну версию библиотеки согласно стратегиям разрешения (часто «ближайшая» или «новарейшая»).
Итог: Разработчик декларативно описывает, какие библиотеки нужны, а система сборки автоматически находит, загружает и управляет ими, включая разрешение конфликтов.