Зависимости
Зависимость — внешняя библиотека, которую использует твой проект. Вместо того чтобы скачивать .jar-файлы вручную, Maven делает это сам по описанию в pom.xml:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>3.2.0</version>
</dependency>
</dependencies>
Указал координаты (те же groupId/artifactId/version, что у pom.xml — тема «pom.xml») — Maven сам скачивает библиотеку и все, что нужно ей самой, из репозитория (по умолчанию — Maven Central, публичное хранилище библиотек).
Копнуть глубже
Транзитивные зависимости. Когда подключаешь библиотеку, она часто тянет за собой свои зависимости — это и есть транзитивность. Если Spring Boot Starter Web использует Jackson для JSON, тебе не нужно подключать Jackson отдельно — он придёт автоматически.
<scope> определяет, где зависимость используется:
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<scope>test</scope> <!-- только для тестов, не попадёт в финальный jar -->
</dependency>
compile(по умолчанию) — нужна везде, попадает в итоговую сборку;test— только для тестов;provided— нужна для компиляции, но на проде уже есть (например, сервлет-контейнер);runtime— не нужна для компиляции, только во время выполнения.
Конфликты версий. Если две библиотеки тянут разные версии одной и той же зависимости — Maven выбирает по правилу “ближайшая по дереву зависимостей” (nearest wins). Посмотреть полное дерево: mvn dependency:tree.
• что такое транзитивные зависимости и зачем нужен `