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.

Dean Hiller
quelle

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

Peter Niederwieser
quelle
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
Dean Hiller
quelle
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
user1707414
quelle
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
icyerasor
quelle
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
Renato
quelle
5
gradlew -q :app:dependencies > dependencies.txt

Schreibt alle Abhängigkeiten in die Datei dependencies.txt

Abitcode
quelle
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
pscl
quelle
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.

Ryan Shillington
quelle
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