Groovy & Gradle: JVM Automation and Build Engineering · Урок

Разрешение конфликтов версий и ограничения зависимостей

Выявляйте и устраняйте конфликты версий зависимостей с помощью отчёта о зависимостях, стратегий разрешения, ограничений и принудительно заданных версий.

Урок 4 из 413 шагов

«Разрешение конфликтов версий и ограничения зависимостей» — бесплатный урок Groovy & Gradle: JVM Automation and Build Engineering на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Groovy & Gradle: JVM Automation and Build Engineering, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Groovy & Gradle: JVM Automation and Build Engineering содержит 4 уроков всего.

Части этого урока еще не переведены и отображаются на английском.

The Conflict Problem

Two libraries you depend on may each pull in a different version of the same transitive dependency. Gradle must pick one — and the wrong choice causes runtime errors. Managing this is a core skill.

Default: Newest Wins

By default Gradle resolves a conflict by choosing the highest requested version of a dependency across the graph. Usually safe, but not always.

Seeing the Dependency Tree

The dependencies task prints the full resolved graph, showing which version won and why.

gradle dependencies --configuration runtimeClasspath

Explaining a Single Dependency

The dependencyInsight task explains exactly how one dependency was resolved and who requested each version.

gradle dependencyInsight --dependency guava

Forcing a Version

You can force a specific version, overriding the conflict resolution, with a resolution strategy.

configurations.all {
    resolutionStrategy {
        force 'com.google.guava:guava:32.1.3-jre'
    }
}

Dependency Constraints

The modern approach uses constraints to declare an allowed version without adding the dependency directly — cleaner than force.

dependencies {
    constraints {
        implementation 'com.google.guava:guava:32.1.3-jre'
    }
}

Excluding Transitives

Sometimes a transitive dependency is unwanted entirely. Exclude it from the bringing dependency.

implementation('org.example:lib:1.0') {
    exclude group: 'commons-logging'
}

Rejecting Bad Versions

A resolution strategy can reject known-broken versions so Gradle never selects them.

resolutionStrategy {
    componentSelection {
        all { if (candidate.version == '1.2.0') reject('known bug') }
    }
}

Failing on Conflict

For strict reproducibility, tell Gradle to fail the build whenever a version conflict occurs, forcing you to resolve it explicitly.

resolutionStrategy { failOnVersionConflict() }

Locking Dependencies

Dependency locking writes resolved versions to a lockfile so builds are fully reproducible across machines and time.

gradle dependencies --write-locks

Platforms and BOMs

Import a published BOM with the platform notation to align many related dependencies on one tested version set, avoiding manual version juggling.

dependencies {
    implementation platform('org.springframework.boot:spring-boot-dependencies:3.2.0')
    implementation 'org.springframework.boot:spring-boot-starter-web'
}

Quick Check

Test your conflict resolution knowledge.

Recap

You learned to manage version conflicts:

  • Default resolution picks the highest version
  • Inspect with dependencies and dependencyInsight
  • Override with force or, preferably, constraints
  • exclude removes unwanted transitives; reject blocks bad versions
  • Dependency locking makes builds reproducible
Можно начать бесплатно

Изучай Groovy с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
12
Уроки
48

Часто задаваемые вопросы

Урок «Разрешение конфликтов версий и ограничения зависимостей» бесплатный?

Да — полный текст урока «Разрешение конфликтов версий и ограничения зависимостей» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Groovy & Gradle: JVM Automation and Build Engineering, подпишись на CoddyKit PRO. Курс Groovy & Gradle: JVM Automation and Build Engineering содержит 4 уроков всего.

Чему я научусь в уроке «Разрешение конфликтов версий и ограничения зависимостей»?

Выявляйте и устраняйте конфликты версий зависимостей с помощью отчёта о зависимостях, стратегий разрешения, ограничений и принудительно заданных версий. Ты практикуешь Groovy & Gradle: JVM Automation and Build Engineering с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Groovy & Gradle: JVM Automation and Build Engineering?

Предыдущий опыт не требуется. Groovy & Gradle: JVM Automation and Build Engineering на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «Разрешение конфликтов версий и ограничения зависимостей»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Groovy & Gradle: JVM Automation and Build Engineering?

Да. Каждый урок Groovy & Gradle: JVM Automation and Build Engineering включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Объявление зависимостей проекта
  2. Разрешение зависимостей и кэширование
  3. Пользовательские репозитории и BOM
  4. Разрешение конфликтов версий и ограничения зависимостей
← Назад к Groovy & Gradle: JVM Automation and Build Engineering