Что такое команда графа зависимостей артефактов Gradle?

123

Я прочитал этот комментарий в документации Gradle :

To deal with problems due to version conflicts, reports with dependency graphs
are also very helpful. Such reports are another feature of dependency management.

Мне приносят какую-то банку, но мне нужно выяснить, откуда она. Обычно я бы просто исключил его глобально, но здесь мне нужна некоторая информация об иерархии. Как мне получить эту информацию, как я могу, от Ivy и Maven?

НЕ говоря уже о том, что кто-то вносит банки Hibernate (много) в мой список jar-файлов, и я действительно хочу знать, кто, поскольку я не использую Hibernate, и пытаюсь устранить эту зависимость.

Дин Хиллер
источник

Ответы:

127

Команда есть gradle dependencies, и ее вывод значительно улучшен в Gradle 1.2. (Вы уже можете попробовать 1.2-rc-1 сегодня.)

Питер Нидервизер
источник
на самом деле, я пробовал это .... Я понял, что мои зависимости находятся в моем подпроекте самого низкого уровня (то есть в том, от которого зависят все остальные), а не в основном проекте ... не уверен, плохо это или хорошо на данный момент ,
Дин Хиллер
Вам нужно запустить команду для конкретного проекта, который вас интересует. Обычно вы переходите в каталог проекта и запускаете команду оттуда.
Питер Нидервизер
9
Это не работает для всех типов проектов. Я получаю сообщение «Нет конфигураций», и мне нужно запустить что-то еще, чтобы это заработало. Надеюсь, однажды gradle справится с этим, поэтому фактические команды будут предсказуемыми.
Р. ван Твиск 07
2
Есть ли флаг для включения транзитивных зависимостей?
thetwan
1
Они включаются автоматически.
Питер Нидервизер,
121

Ах, так как у меня не было зависимостей в моем главном проекте, «зависимости gradle» перечисляют только эти, а не зависимости подпроекта, поэтому правильная команда оказалась

 gradle :<subproject>:dependencies

так для меня это было

 gradle :master:dependencies
Дин Хиллер
источник
20
Приятно, если можно сказать -rрекурсивный
Бланделл
38

Если вы хотите увидеть зависимости проекта и всех подпроектов, используемых в вашем build.gradle верхнего уровня:

subprojects {
    task listAllDependencies(type: DependencyReportTask) {}
}

Затем вызовите gradle:

gradle listAllDependencies
user1707414
источник
2
Подробнее об этом подходе читайте
Марцин Зайончковски,
9
Вы можете добавить это в свой, ~/.gradle/init.gradleа не в каждую сборку. Тогда он работает для всех проектов на вашем компьютере, но только для вас.
derekv
24

Если у вас много конфигураций, вывод может быть довольно длинным. Чтобы просто показать зависимости для конфигурации среды выполнения, запустите

gradle dependencies --configuration runtime
icyerasor
источник
15

Если вы хотите, чтобы рекурсивно включало подпроекты, вы всегда можете написать это самостоятельно:

Вставить в верхний уровень build.gradle:

task allDeps << {
    println "All Dependencies:"
    allprojects.each { p ->
        println()
        println " $p.name ".center( 60, '*' )
        println()
        p.configurations.all.findAll { !it.allDependencies.empty }.each { c ->
            println " ${c.name} ".center( 60, '-' )
            c.allDependencies.each { dep ->
                println "$dep.group:$dep.name:$dep.version"
            }
            println "-" * 60
        }
    }
}

Бежать с:

gradle allDeps
Ренато
источник
5
gradlew -q :app:dependencies > dependencies.txt

Запишем все зависимости в файл dependencies.txt

abitcode
источник
4

Для тех, кто хочет отлаживать зависимости Gradle в react-nativeпроектах, команда (выполняется из projectname/android)

./gradlew app:dependencies --configuration compile
pscl
источник
0

В последних версиях Gradle (например, 5+), если вы запускаете свою сборку с --scanфлагом, она сообщает вам всевозможную полезную информацию, включая зависимости, в браузере, где вы можете щелкнуть мышью.

gradlew --scan clean build

Он проанализирует все, что происходит в этой сборке. Это довольно аккуратно.

Райан Шиллингтон
источник
1
но он анализирует только цели, которые
Дин Хиллер
Правда! Все зависит от того, чего вы хотите. Я думаю, что зависимости только для запущенных целей еще более эффективны. Он расскажет вам, почему один набор команд работает неправильно.
Райан Шиллингтон
Мне действительно нужен полный график, поэтому мне не нужно проверять каждый узел tbh .... это становится довольно утомительным .... даже если на это требуется время, это более полезно, но я не вижу способа сделать это в более новых версиях.
Дин Хиллер