it-swarm.com.de

Verwenden von Gradle zum Finden des Abhängigkeitsbaums

Ist es möglich, Gradle zu verwenden, um einen Baum von dem zu erzeugen, was davon abhängig ist?

Ich habe ein Projekt und möchte alle Abhängigkeiten herausfinden, damit ich es vielleicht mit Forward-Deklarationen ein wenig beschneiden kann. 

366
user3286701

Verwenden Sie für Android diese Zeile

 gradle app:dependencies

oder wenn Sie einen gradle Wrapper haben:

./gradlew app:dependencies

wobei app Ihr Projektmodul ist. 

Darüber hinaus, wenn Sie prüfen möchten, ob etwas compile vs. testCompile vs. androidTestCompile Abhängigkeit ist und was dazugehört:

./gradlew :app:dependencyInsight --configuration compile --dependency <name>
./gradlew :app:dependencyInsight --configuration testCompile --dependency <name>
./gradlew :app:dependencyInsight --configuration androidTestCompile --dependency <name>
450
Chad Bingham

Sie können den Abhängigkeitsbaum mit dem Befehl gradle dependencies rendern. Weitere Informationen finden Sie im Abschnitt 11.6.4 Auflisten von Projektabhängigkeiten im Online-Benutzerhandbuch.

184

Wenn Sie Schwierigkeiten haben, in der Konsolenausgabe von gradle dependencies zu navigieren, können Sie das Plugin Project reports hinzufügen:

apply plugin: 'project-report'

Und erzeugen Sie einen HTML-Bericht mit:

$ ./gradlew htmlDependencyReport

Der Bericht ist normalerweise in build/reports/project/dependencies/index.html zu finden.

Es sieht aus wie das:  enter image description here

107
Devstr

In Android Studio (mindestens seit Version 2.3.3) können Sie den Befehl direkt über die Benutzeroberfläche ausführen: 

Klicken Sie auf die Registerkarte Gradle und doppelklicken Sie dann auf : IhrModul -> Aufgaben -> Android -> androidDependencies.

Die Baumstruktur wird auf der Registerkarte Gradle Console angezeigt

 An image is worth a thousand words

66

Oft ist der vollständige Abhängigkeitsgraph test, compile und androidTestCompile zu viel, um gemeinsam untersucht zu werden. Wenn Sie lediglich den compile Abhängigkeitsgraphen wünschen, können Sie Folgendes verwenden:

./gradlew app:dependencies --configuration compile

Quelle: Gradle docs Abschnitt 4.7.6

Hinweis: compile wurde in neueren Versionen von Gradle nicht mehr unterstützt und in neueren Versionen wird empfohlen, alle compile-Abhängigkeiten auf implementation zu verschieben. Bitte sehen Sie diese Antwort hier

22
David Rawson

Wenn Sie Ihre Abhängigkeiten in einem Diagramm visualisieren möchten, können Sie Gradle-Abhängigkeitsgraphengenerator plugin verwenden.

Im Allgemeinen befindet sich die Ausgabe dieses Plugins im Verzeichnis build/reports/dependency-graph. Es enthält drei Dateien (.dot | .png | .svg), wenn Sie die Version 0.5.0 verwenden des Plugins.

Beispiel eines Abhängigkeitsgraphen in einer realen App ( Chess Clock ):

 graph

14
David Miguel

Beachten Sie, dass Sie möglicherweise etwas wie ./gradlew <module_directory>:<module_name>:dependencies tun müssen, wenn das Modul über ein zusätzliches Verzeichnis verfügt, bevor Sie sein build.gradle erreichen. Im Zweifelsfall überprüfen Sie den Namen mit ./gradlew tasks --all.

5
林果皞

In Android Studio

1) Öffnen Sie das Terminal und stellen Sie sicher, dass Sie sich im Stammverzeichnis des Projekts befinden.

2) Führen Sie ./gradlew app:dependencies aus (wenn Sie keinen Gradle-Wrapper verwenden, versuchen Sie gradle app:dependencies).

Wenn Sie ./gradle dependencies ausführen, erhalten Sie nur einen Abhängigkeitsbaum des Stammordners des Projekts. Es ist daher wichtig, die App in der oben genannten Weise zu erwähnen, d. H. ./gradlew app:dependencies.

5

Die Dinge haben sich in Gradle weiterentwickelt, daher glaube ich, dass diese Frage eine andere Antwort verdient.
Seit Gradle 4.3 wurde "build scans" eingeführt. Alle relevanten Informationen finden Sie in den Gradle-Dokumenten ( 1 , 2 ). Für mich scheint dies nun der einfachste Weg zu sein, um Ihre Abhängigkeiten (und generell Ihren Build) auf eine klare, organisierte Weise zu überprüfen.

Sie sind sehr einfach zu erstellen, einfach auszuführen: 

gradle build --scan  

(oder ./gradlew build --scan, wenn Sie einen Wrapper verwenden)

Dies erzeugt einen zufällig generierten Link, in dem Sie Ihren Scan sehen können. Wenn Sie zu diesem Link gehen, geben Sie Ihre E-Mail-Adresse ein und Sie haben die volle Kontrolle über diesen Link, z. teilen Sie es oder löschen Sie es. Es hat viele Informationen zu Ihrem Build, nicht nur Abhängigkeiten. Sie können Ihre Abhängigkeiten, ihre Hierarchien, das verwendete Repository, aber auch viele andere Informationen zu Ihrem Build sehen, nämlich seine Leistung (die für große komplexe Builds von Interesse ist), Ihre Tests, sogar Ihre Konsolenausgabe und Ihre Systemkonfiguration, welches JDK und JVM verwendet wurde, maximale Heapgröße usw. 

Dies ist ein Druckbildschirm aus einem Scheinprojekt: 

 Build scan example

Ein Build-Scan ist eine gemeinsam benutzbare Aufzeichnung eines Builds, die Einblick in das, was passiert ist und warum gibt. Sie können einen Build-Scan unter scans.gradle.com kostenlos erstellen. 

Beachten Sie jedoch, dass Informationen für Ihren Build-Prozess an die Gradle-Server gesendet werden. Sie haben die volle Kontrolle über das Löschen, wenn Sie mit der Inspektion fertig sind.

Schließlich können Sie Build-Scans auch mit älteren Versionen als 4.3 verwenden. Sie müssen lediglich das Plug-In für Scans manuell in Ihr Buildscript einfügen.

Bearbeiten:
Einige Rückmeldungen aus den Kommentaren enthalten einige zusätzliche Hinweise:
1) Es ist sehr schwierig, dies aus Versehen oder ohne zu verstehen, dass einige Informationen zu Ihrem Build online sein werden (privat für Sie, mit der Möglichkeit, sie zu löschen, aber immer noch online). 

Bei der Ausführung von gradle build --scan erscheint folgende Meldung: 

Publishing a build scan to scans.gradle.com requires accepting the Gradle
Terms of Service defined at https://gradle.com/terms-of-service. Do you
accept these terms? [yes, no]

Du musst explizit yes schreiben und dann geht die Nachricht weiter: 

Publishing build scan...  
https://gradle.com/s/a12en0dasdu

2) In Gradle Enterprise können Sie Gradle Build-Scans auf Ihren eigenen Servern hosten. Ich habe jedoch keine Erfahrung damit und mein Vorschlag ging von der Standard-Verteilung von Gradle aus, wobei die Server von Gradle für Ihre Build-Scans verwendet wurden. 

3) Gradle selbst fördert die Build-Scans als Lösung für die meisten Build-Probleme. 

3
tryman

Ich fand es auch nützlich, dies auszuführen:

./gradlew dI --dependency <your library>

Dies zeigt, wie Abhängigkeiten aufgelöst werden (dependencyInsight) und hilft Ihnen beim Debuggen, wo Sie Bibliotheken in Ihrem build.gradle erzwingen oder ausschließen müssen.

Siehe: https://docs.gradle.org/current/userguide/tutorial_gradle_command_line.html

2

Geben Sie für Android dieses Terminal ein

gradlew app:dependencies

Es werden alle Abhängigkeiten und die mit neueren Versionen aufgelistet, die Sie aktualisieren können

com.Android.support:customtabs:26.1.0 -> 27.1.1 (*)
2
Remy