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ść.

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.)


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

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

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

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

5
gradlew -q :app:dependencies > dependencies.txt

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


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

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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.