Co to jest polecenie wykresu zależności artefaktów Gradle?

123

Przeczytałem ten komentarz w dokumentach 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.

Przyniesiono mi jakiś słoik, ale muszę się dowiedzieć, skąd pochodzi. Normalnie po prostu wykluczyłbym to globalnie, ale potrzebuję tutaj informacji na temat hierarchii. Jak uzyskać takie informacje od Ivy and Maven?

NIE wspominając o tym, że ktoś wprowadza słoiki Hibernate (dużo) na moją listę słoików i naprawdę chcę wiedzieć, kto, ponieważ nie używam Hibernate, i spróbować wyeliminować tę zależność.

Dean Hiller
źródło

Odpowiedzi:

128

Polecenie to gradle dependencies, a jego dane wyjściowe są znacznie ulepszone w Gradle 1.2. (Możesz już dziś wypróbować 1.2-rc-1.)

Peter Niederwieser
źródło
faktycznie próbowałem tego .... zdałem sobie sprawę, że moje zależności są w moim podprojekcie najniższego poziomu (tj. tym, na którym wszyscy inni polegają), a nie w głównym projekcie ... nie jestem pewien, czy to jest złe czy dobre w tym momencie .
Dean Hiller,
Musisz uruchomić polecenie dla konkretnego projektu, który Cię interesuje. Zwykle wchodzisz do katalogu projektu i uruchamiasz stamtąd polecenie.
Peter Niederwieser,
9
To nie działa we wszystkich typach projektów. Otrzymuję komunikat „Brak konfiguracji” i muszę uruchomić coś innego, aby to działało. Miejmy nadzieję, że pewnego dnia gradle sobie z tym poradzi, więc faktyczne polecenia będą przewidywalne.
R. van Twisk
2
Czy istnieje flaga uwzględniająca zależności przechodnie?
thetwan
1
Są dołączane automatycznie.
Peter Niederwieser
121

Ach, ponieważ nie miałem żadnych zależności w moim głównym projekcie, "zależności gradle" wymienia tylko te, a nie zależności podprojektu, więc prawidłowe polecenie zakończyło się

 gradle :<subproject>:dependencies

więc dla mnie to było

 gradle :master:dependencies
Dean Hiller
źródło
20
Fajnie, gdybyś mógł powiedzieć -ro rekursywnym
Blundell
38

Jeśli chcesz zobaczyć zależności w projekcie i wszystkie podprojekty używane w build.gradle najwyższego poziomu:

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

Następnie zadzwoń do gradle:

gradle listAllDependencies
user1707414
źródło
2
Więcej szczegółów na temat tego podejścia w poście na blogu: solidsoft.wordpress.com/2014/11/13/…
Marcin Zajączkowski
9
Możesz to dodać do swojego, ~/.gradle/init.gradlezamiast dodawać go do każdej kompilacji. Wtedy działa dla wszystkich projektów na twoim komputerze, ale tylko dla ciebie.
derekv
24

Jeśli masz wiele konfiguracji, dane wyjściowe mogą być dość długie. Aby po prostu pokazać zależności dla konfiguracji środowiska wykonawczego, uruchom

gradle dependencies --configuration runtime
lodowaty
źródło
15

Jeśli chcesz, aby rekurencja obejmowała podprojekty, zawsze możesz ją napisać samodzielnie:

Wklej na najwyższym poziomie 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
        }
    }
}

Biegnij z:

gradle allDeps
Renato
źródło
5
gradlew -q :app:dependencies > dependencies.txt

Zapisuje wszystkie zależności do pliku dependencies.txt

abitcode
źródło
4

Dla tych, którzy chcą debugować zależności gradle w react-nativeprojektach, polecenie jest (wykonywane z projectname/android)

./gradlew app:dependencies --configuration compile
pscl
źródło
0

W najnowszych wersjach Gradle (tj. 5+), jeśli uruchomisz kompilację z --scanflagą, wyświetli ona wszelkiego rodzaju przydatne informacje, w tym zależności, w przeglądarce, w której możesz klikać.

gradlew --scan clean build

Przeanalizuje bzdury z tego, co dzieje się w tej kompilacji. To całkiem fajne.

Ryan Shillington
źródło
1
ale analizuje tylko cele, które nie miały pełnego wykresu :(.
Dean Hiller
Prawdziwe! To zależy od tego, czego chcesz. Myślę, że zależności tylko dla uruchomionych celów są jeszcze potężniejsze. Powie ci, dlaczego jeden zestaw poleceń wydaje się działać nieprawidłowo.
Ryan Shillington
Naprawdę chcę mieć pełny wykres, więc nie muszę testować każdego węzła tbh ... to staje się dość nudne ... nawet jeśli zajmuje to trochę czasu, jest bardziej przydatne, ale nie widzę sposobu, aby to zrobić to w nowszych wersjach.
Dean Hiller