Какая польза от ограничений в разрешении зависимостей Gradle?

#gradle #dependencies #constraints #gradle-dependencies

Вопрос:

Существует библиотека, т. е. io.github.elye:simplekotlinlibrary с версиями 1.0.0, 2.0.0 и 3.0.0.

Содержать io.github.elye:easyandroidlibrary:1.0.0 io.github.elye:simplekotlinlibrary:1.0.0

Содержать io.github.elye:simpleandroidlibrary:2.0.0 io.github.elye:simplekotlinlibrary:2.0.0

Так что в моем классе, если у меня есть

     implementation ('io.github.elye:easyandroidlibrary:1.0.0')
    implementation ('io.github.elye:simpleandroidlibrary:2.0.0')
    implementation ('io.github.elye:simplekotlinlibrary:3.0.0')
 

Он автоматически разрешится io.github.elye:simplekotlinlibrary:3.0.0 для проекта, включая переходные зависимости.

Однако, с https://docs.gradle.org/current/userguide/dependency_constraints.html#sec:adding-constraints-transitive-deps, в нем говорится, что constrains также принудительно выполняется обновление зависимостей до указанной версии 3.0.0 .

     implementation ('io.github.elye:easyandroidlibrary:1.0.0')
    implementation ('io.github.elye:simpleandroidlibrary:2.0.0')
    implementation ('io.github.elye:simplekotlinlibrary')

    constraints {
        implementation('io.github.elye:simplekotlinlibrary:3.0.0') {
            because 'testing force upgrade'
        }
    }
 

Насколько я понимаю, два приведенных выше примера приведут к одному и тому же результату. Похоже constraint , в этом нет реальной пользы? Чем constraint отличается разрешение различных автоматических зависимостей?

Ответ №1:

Я думаю, что в приведенном выше примере они одинаковы.

Однако в том случае , если проект верхнего уровня не нуждается io.github.elye:simplekotlinlibrary в использовании constraint , все равно можно принудительно установить все переходные зависимости по крайней мере до версии, указанной, constraint как показано ниже.

     implementation ('io.github.elye:easyandroidlibrary:1.0.0')
    implementation ('io.github.elye:simpleandroidlibrary:2.0.0')

    constraints {
        implementation('io.github.elye:simplekotlinlibrary:3.0.0') {
            because 'testing force upgrade'
        }
    }
 

Более подробную иллюстрацию можно найти здесь