Вопрос проверяет понимание dependency resolution в Gradle и умение контролировать версии библиотек.
Gradle по умолчанию выбирает самую новую версию зависимости. Это называется стратегией «newest wins». При необходимости версию можно зафиксировать явно. Также существуют механизмы dependency constraints и resolutionStrategy. Они позволяют управлять конфликтами осознанно.
Управление зависимостями — одна из сильных сторон Gradle.
Dependency resolution — процесс выбора конкретных версий библиотек при наличии конфликтов транзитивных зависимостей.
Если разные зависимости требуют разные версии одной библиотеки:
Gradle анализирует граф зависимостей
Выбирает самую новую версию
Использует её для всех зависимостей
Существует несколько способов.
implementation("org.slf4j:slf4j-api:1.7.36")
dependencies {
constraints {
implementation("org.slf4j:slf4j-api:1.7.36")
}
}
configurations.all {
resolutionStrategy {
force("org.slf4j:slf4j-api:1.7.36")
}
}
Используется в больших проектах для централизованного управления версиями.
Gradle по умолчанию выбирает новые версии, но предоставляет мощные инструменты для строгого контроля зависимостей. Их стоит использовать в крупных и долгоживущих проектах.