Was ist der Befehl Gradle-Artefakt-Abhängigkeitsdiagramm?


123

Ich habe diesen Kommentar in den Gradle-Dokumenten gelesen :

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

Ich habe eine Art Glas, das hereingebracht wird, aber ich muss herausfinden, woher es kommt. Normalerweise würde ich es nur global ausschließen, aber ich brauche hier einige Informationen zur Hierarchie. Wie bekomme ich diese Informationen wie möglich von Ivy und Maven?

Ganz zu schweigen davon, dass jemand Hibernate-Gläser (viel) in meine Glasliste einbringt, und ich möchte wirklich wissen, wer, da ich Hibernate nicht verwende, und versuche, diese Abhängigkeit auszuschalten.

Antworten:


127

Der Befehl lautet gradle dependenciesund seine Ausgabe wurde in Gradle 1.2 erheblich verbessert. (Sie können 1.2-rc-1 bereits heute ausprobieren.)


Eigentlich habe ich das versucht ... Ich habe festgestellt, dass meine Abhängigkeiten in meinem Teilprojekt der untersten Ebene (dh dem, von dem alle anderen abhängen) und nicht im Hauptprojekt liegen ... ich bin mir nicht sicher, ob das zu diesem Zeitpunkt schlecht oder gut ist .
Dean Hiller

Sie müssen den Befehl für das bestimmte Projekt ausführen, an dem Sie interessiert sind. In der Regel werden Sie in das Projektverzeichnis cd und den Befehl von dort aus ausführen.
Peter Niederwieser

9
Dies funktioniert nicht bei allen Arten von Projekten. Ich erhalte "Keine Konfigurationen" und muss etwas anderes ausführen, um dies in Gang zu bringen. Hoffentlich wird Gradle eines Tages damit umgehen, damit die eigentlichen Befehle vorhersehbar sind.
R. van Twisk

2
Gibt es ein Flag zum Einbeziehen von transitiven Abhängigkeiten?
Thetwan

1
Sie werden automatisch aufgenommen.
Peter Niederwieser

121

Ah, da ich in meinem Masterprojekt keine Abhängigkeiten hatte, listet "gradle dependencies" nur diese und keine Teilprojektabhängigkeiten auf, sodass der richtige Befehl am Ende war

 gradle :<subproject>:dependencies

so für mich war das

 gradle :master:dependencies

20
Schön, wenn Sie -rfür rekursiv sagen könnten
Blundell

38

Wenn Sie Abhängigkeiten vom Projekt und allen Teilprojekten anzeigen möchten, die in Ihrem build.gradle der obersten Ebene verwendet werden:

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

Dann ruf gradle an:

gradle listAllDependencies

2
Weitere Details zu diesem Ansatz im Blog-Beitrag: solidsoft.wordpress.com/2014/11/13/…
Marcin Zajączkowski

9
Sie können dies zu Ihrem ~/.gradle/init.gradleBuild hinzufügen, anstatt es jedem Build hinzuzufügen. Dann funktioniert es für alle Projekte auf Ihrem Computer, aber nur für Sie.
Derek

24

Wenn Sie viele Konfigurationen haben, kann die Ausgabe ziemlich lang sein. Führen Sie Folgendes aus, um nur Abhängigkeiten für die Laufzeitkonfiguration anzuzeigen

gradle dependencies --configuration runtime

15

Wenn Sie möchten, dass rekursive Teilprojekte enthalten, können Sie diese jederzeit selbst schreiben:

In die oberste Ebene einfügen 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
        }
    }
}

Laufen Sie mit:

gradle allDeps

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

Schreibt alle Abhängigkeiten in die Datei dependencies.txt


4

Für diejenigen, die Gradle-Abhängigkeiten in react-nativeProjekten debuggen möchten , lautet der Befehl (ausgeführt von projectname/android)

./gradlew app:dependencies --configuration compile

0

Wenn Sie in neueren Versionen von Gradle (dh 5+) Ihren Build mit dem --scanFlag ausführen , werden Ihnen alle Arten nützlicher Informationen, einschließlich Abhängigkeiten, in einem Browser angezeigt, in dem Sie herumklicken können.

gradlew --scan clean build

Es wird den Mist aus dem analysieren, was in diesem Build vor sich geht. Es ist ziemlich ordentlich.


1
aber es analysiert nur die Ziele, die nicht die vollständige Grafik lief :(.
Dean Hiller

Wahr! Es kommt darauf an, was Sie wollen. Ich denke, Abhängigkeiten nur für die Ziele, die ausgeführt wurden, sind noch leistungsfähiger. Hier erfahren Sie, warum ein Befehlssatz das Falsche zu tun scheint.
Ryan Shillington

Ich möchte wirklich das vollständige Diagramm, damit ich nicht jeden Knoten tbh testen muss ... das wird ziemlich langweilig ... selbst wenn es eine Weile dauert, ist es nützlicher, aber ich sehe keinen Weg, dies zu tun es in den neueren Versionen.
Dean Hiller
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.