Utilizzo di Gradle per trovare l'albero delle dipendenze


543

È possibile usare il gradle per produrre un albero di ciò che dipende da cosa?

Ho un progetto e vorrei scoprire tutte le dipendenze, quindi potrei essere in grado di potarlo un po 'con dichiarazioni anticipate ecc.



@OliverCharlesworth utilizza il pulsante Chiudi per contrassegnare la risposta come duplicato
030

1
@ user3286701 forse potresti accettare una delle risposte?
030

6
gradle dependenciesdovrebbe funzionare. È pazzesco come tutti abbiano gradlew app:dependenciesprobabilmente perché Android.
prayagupd,

2
@prayagupd Questa dovrebbe essere la risposta. La domanda riguarda il grado. Dopo aver letto le risposte altamente classificate, ho aperto il terminale e registrato nella directory di un progetto generale che utilizza il gradle. Ho eseguito l'app gradle: dipendenze e ho ricevuto l'errore "Build fail" anche se non avevo intenzione di creare nulla. Il mio progetto si sviluppa bene e volevo solo vedere le dipendenze.
Ka3ak

Risposte:


604

Per Android, usa questa linea

 gradle app:dependencies

o se hai un wrapper gradle:

./gradlew app:dependencies

dov'è il apptuo modulo di progetto.

Inoltre, se si desidera verificare se qualcosa è compilevs testCompilevs. androidTestCompiledipendenza, nonché cosa lo sta tirando dentro:

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

10
Ah, ho dovuto inserire il nome del modulo lì. Ecco perché ... Grazie!
Jenix

Ho appena iniziato a studiare elementare ora, quindi un po 'confuso. Posso considerare gradlew come gradle, voglio dire, posso inserire le stesse opzioni / comandi di gradlew con gradlew?
Jenix

1
@Jenix sì, se stai usando un wrapper basta usare ./gradlewal posto digradle
Chad Bingham

2
Ottengo l'errore Project 'app' not found in root projectquando eseguo questi comandi. La soluzione di Benjamins tuttavia ha funzionato.
Krock

5
In effetti ./gradlew :dependenciesfunzionerà. Elencherà le dipendenze per tutti i tuoi progetti, ma è facile trovare quello giusto.
Dirkjot,

240

È possibile eseguire il rendering dell'albero delle dipendenze con il comando gradle dependencies. Per ulteriori informazioni, consultare la sezione 11.6.4 Elenco delle dipendenze del progetto nella guida per l'utente online.


2
Quando lo faccio con il mio progetto Android, tutto ciò che ottengo è questo output: pastebin.com/fHFigAuY Suggerimenti?
Nilzor,

3
@Nilzor Probabilmente stai eseguendo il comando nella directory sbagliata (che non contiene il build.gradlefile) o il tuo file di build non applica alcun plugin.
Benjamin Muschko,

6
puoi ottenere dipendenze per un progetto specifico usando gradle: project: dependencies
mbonnin,


3
Se si utilizza il wrapper:./gradlew dependencies
ScrappyDev,

152

Se trovi difficile navigare nell'output della console di gradle dependencies, puoi aggiungere il plug-in Rapporti di progetto :

apply plugin: 'project-report'

E genera un rapporto HTML usando:

$ ./gradlew htmlDependencyReport

Il rapporto si trova normalmente in build/reports/project/dependencies/index.html

Sembra così: inserisci qui la descrizione dell'immagine


2
Per me era sologradle htmlDependencyReport
Richard Tingle il

2
Questo non funziona per progetti multimodulo. Vedo solo e svuoto l'elenco.
Adam Arold,

1
Grande scoperta. Il plugin in realtà fa molto di più docs.gradle.org/current/userguide/project_report_plugin.html
ruX

78

In Android Studio (almeno dalla v2.3.3) è possibile eseguire il comando direttamente dall'interfaccia utente:

Fai clic sulla scheda Gradle e quindi fai doppio clic su : yourmodule -> Task -> android -> androidDependencies

L'albero verrà visualizzato nella scheda Gradle Console

Un'immagine vale più di mille parole


1
come posso ottenere la vista "progetti gradle"?
user3526

1
@ user3526 fai clic sul tag "gradle" che si trova sul lato destro dello schermo. Guarda l'immagine allegata per riferimento
Nicolás Carrasco,

2
Ho scoperto che questo crea un elenco semplice in AS 3.2.0, invece di un albero. La variante da riga di comando crea comunque un albero.
Tom,

5
@Tom esegue l'attività 'depencies' nella categoria 'help' non 'android'. Mostra come albero
Maxim Berezovsky

27

Spesso il grafico completo test, compilee di androidTestCompiledipendenza è troppo da esaminare insieme. Se vuoi semplicemente il compilegrafico delle dipendenze puoi usare:

./gradlew app:dependencies --configuration compile

Fonte: sezione Documenti Gradle 4.7.6

Nota: compileè stato deprecato nelle versioni più recenti di Gradle e in versioni più recenti si consiglia di spostare tutte le compiledipendenze implementation. Si prega di vedere questa risposta qui


4
solo una nota: la compilazione è stata deprecata, le persone dovrebbero ora passare all'implementazione
reinaldomoreira

25

Se si desidera visualizzare le proprie dipendenze in un grafico, è possibile utilizzare il plug-in generatore di grafici gradle-dipendenza .

Generalmente l'output di questo plugin può essere trovato nella directory build / reports / dependency-graph e contiene tre file (.dot | .png | .svg) se si utilizza la versione 0.5.0 del plugin.

Esempio di grafico delle dipendenze in un'app reale ( Chess Clock ):

grafico


Ehi David, ho fatto come mi è stato detto nelle istruzioni del plugin. Ho applicato il plug-in a livello di progetto ma non vedo alcuna cartella dei report nella directory di build. C'è qualcosa che dobbiamo fare oltre a costruire ed eseguire il progetto?
Rushi M Thakker,

Questo plugin non mostra la versione di dipendenza e i conflitti. così per Maven; github.com/janssk1/maven-graph-plugin/wiki/Manual Questo lo rende inutile ..
sytolk

18

Per Android, digita questo nel terminale

gradlew app:dependencies

Elencherà tutte le dipendenze e quelle con le versioni più recenti per l'aggiornamento come

com.android.support:customtabs:26.1.0 -> 27.1.1 (*)

15

Le cose sono andate avanti in Gradle, quindi credo che questa domanda meriti un'altra risposta.
Dal grado 4.3 sono state introdotte le " scansioni di costruzione ". Tutte le informazioni rilevanti sono disponibili nei documenti Gradle ( 1 , 2 ). Per me, questo sembra ora essere il modo più semplice per controllare le tue dipendenze (e generalmente la tua build) in modo chiaro e organizzato.

Sono molto facili da creare, basta eseguire:

gradle build --scan  

(o ./gradlew build --scanse si utilizza un wrapper)

Questo produce un collegamento generato casualmente dove puoi vedere la tua scansione. Quando apri quel link, inserisci la tua email e ottieni il pieno controllo del link: ad es. condividilo o eliminalo. Ha molte informazioni sulla tua build , non solo sulle dipendenze. Puoi vedere le tue dipendenze, le loro gerarchie, il repository usato per ottenerle, ma anche molte altre cose sulla tua build, vale a dire le sue prestazioni (che sono di interesse in build complesse di grandi dimensioni), i tuoi test, persino l'output della tua console e il tuo configurazione di sistema, che sono stati utilizzati JDK e JVM, dimensione heap massima ecc.

Questa è una schermata da un progetto finto:

Crea esempio di scansione

Una scansione build è un record condivisibile di una build che fornisce approfondimenti su ciò che è accaduto e perché. Puoi creare una scansione di build su scans.gradle.com gratuitamente.

Si noti tuttavia che le informazioni per il processo di compilazione verranno inviate ai server Gradle. Hai il pieno controllo per eliminarlo al termine dell'ispezione.

Infine, puoi utilizzare le scansioni di build con versioni Gradle precedenti alla 4.3, devi solo aggiungere manualmente il plug-in delle scansioni nel tuo buildscript.

Modifica :
incorporando alcuni feedback dai commenti alcune note extra:
1) È molto difficile farlo per errore o senza capire che alcune informazioni per la tua build saranno online (private per te, con la possibilità di eliminarle, ma ancora online ).

Quando si esegue gradle build --scanil seguente messaggio appare:

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]

Devi scrivere esplicitamente yese quindi il messaggio continua:

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

2) In Gradle Enterprise è possibile ospitare scansioni build Gradle nei propri server. Tuttavia, non ho esperienza in questo e il mio approccio proposto riguardava la distribuzione standard di Gradle, usando i server Gradle per le tue scansioni di build.

3) Gradle stesso promuove le scansioni di build come il modo per affrontare la maggior parte dei problemi di build.


11
Mi spiace di sottovalutare la risposta, ma IMO non sta rispondendo alla domanda e non sta avvertendo abbastanza chiaramente che da gradle build --scante pubblichi i dettagli della tua build da qualche parte su Internet - e per eliminarla devi associarla a un indirizzo e-mail funzionante.
Michal,

1
Ehi Michal, sei libero di votare se la pensi così. Comunque devo chiederlo, l'hai provato? Quando si esegue gradle build --scanin cmd, viene richiesto: 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]. Devi scrivere manualmente yes. Subito dopo, ricevi il messaggio: Publishing build scan... https://gradle.com/s/a12en0dasdu(metti casualmente un link dello stesso tipo). Quindi credo che ti avverta adeguatamente prima. (1/2)
tryman

1
Puoi visitare il link ed eliminare immediatamente la scansione, senza e-mail o altro. Come risposta, credo che risponda alla domanda . In effetti, ti mostra informazioni extra sulle tue dipendenze (e fai il possibile: informazioni extra anche per l'intera build) rispetto ad altri approcci. Se non lo trovi di tuo gradimento va bene, ma è (per quanto ne so) lo strumento più completo in questo momento per il lavoro, quindi è prezioso averlo a mente. Infine, è promosso da Gradle stesso, è letteralmente la loro prima guida (2/2)
tryman

@Michal Siamo spiacenti, ho dimenticato di taggarti prima, quindi potresti non aver visto i miei commenti. (Ho anche modificato il post per incorporare i commenti con i quali ti ho risposto.)
tryman

2
Non ci ho provato - grazie per aver chiarito l'accettazione dei termini. Ho rimosso il mio -1.
Michal,

9

In Android Studio

1) Apri il terminale e assicurati di trovarti nella cartella principale del progetto.

2) Esegui ./gradlew app:dependencies (se non si utilizza il gradle wrapper, provare gradle app:dependencies)

Nota che l'esecuzione ./gradle dependenciesti darà solo l'albero delle dipendenze della cartella principale del progetto, quindi menzionare l'app nel modo sopra, cioè ./gradlew app:dependenciesè importante.


1
per me ha funzionato senza "./", come quello: gradlew app: dipendenze.
Gilad Levinson,


7

Nota che potresti dover fare qualcosa come ./gradlew <module_directory>:<module_name>:dependenciesse il modulo ha una directory extra prima di raggiungere il suo build.gradle. In caso di dubbi, ./gradlew tasks --allverifica il nome.


7

Per me era semplicemente un comando

in build.gradle aggiungi plugin

apply plugin: 'project-report'

e poi vai su cmd ed esegui il seguente comando

./gradlew htmlDependencyReport

Questo mi dà un report HTML WOW Html report 💕

Questo è tutto il mio signore.


Questo ha già risposto Devstr.
brute_force

Sì, grazie @brute_force A quel tempo non era visibile per me. Cosa vuoi, rimuovi la mia risposta?
Dupinder Singh,

1

Per le versioni recenti di Gradle (ho testato con la versione 6.4.1):

gradle dependencies --configuration compileClasspath

o se stai usando il Gradle Wrapper:

gradlew dependencies --configuration compileClasspath

0

Se si desidera tutte le dipendenze in un singolo file alla fine in due passaggi. Aggiungi questo al tuo build.gradle.ktsnella radice del tuo progetto:

project.rootProject.allprojects {
    apply(plugin="project-report")

    this.task("allDependencies", DependencyReportTask::class) {
        evaluationDependsOnChildren()
        this.setRenderer(AsciiDependencyReportRenderer())
    }

}

Quindi applicare:

./gradlew allDependencies | grep '\-\-\-' | grep -Po '\w+.*$' | awk -F ' ' '{ print $1 }' | sort | grep -v '\{' | grep -v '\[' | uniq | grep '.\+:.\+:.\+'

Questo ti darà tutte le dipendenze nel tuo progetto e sottoprogetto insieme a tutte le dipendenze di terze parti.

Se vuoi farlo in modo programmatico, allora avrai bisogno di un renderer personalizzato delle dipendenze - puoi iniziare estendendo AsciiDependencyReportRendererper impostazione predefinita la stampa di un grafico ASCII delle dipendenze.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.