Cos'è il comando Gradle artifact dependency graph?


123

Ho letto questo commento nei documenti di 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.

Ho una specie di barattolo che viene portato dentro ma ho bisogno di capire da dove proviene. Normalmente lo escluderei a livello globale, ma qui ho bisogno di alcune informazioni sulla gerarchia. Come ottengo queste informazioni come posso da Ivy e Maven?

Per NON parlare del fatto che qualcuno sta portando (molto) i jar Hibernate nella mia lista di jar e voglio davvero sapere chi dal momento che non sto usando Hibernate e cercare di eliminare questa dipendenza.

Risposte:


127

Il comando è gradle dependencies, e il suo output è molto migliorato in Gradle 1.2. (Puoi già provare 1.2-rc-1 oggi.)


in realtà, ci ho provato ... mi sono reso conto che le mie dipendenze sono nel mio sottoprogetto di livello più basso (cioè quello da cui dipendono tutti gli altri) e non nel progetto principale ... non sono sicuro se sia cattivo o buono a questo punto .
Dean Hiller

Devi eseguire il comando per il particolare progetto a cui sei interessato. In genere, dovresti entrare nella directory del progetto ed eseguire il comando da lì.
Peter Niederwieser

9
Questo non funziona su tutti i tipi di progetti. Ricevo "Nessuna configurazione" e devo eseguire qualcos'altro per farlo funzionare. Si spera che un giorno gradle gestirà questo in modo che i comandi effettivi siano prevedibili.
R. van Twisk

2
Esiste un flag per includere le dipendenze transitive?
thetwan

1
Sono inclusi automaticamente.
Peter Niederwieser

121

Ah, poiché non avevo dipendenze nel mio progetto principale, "gradle dependencies" elenca solo quelle e non le dipendenze del sottoprogetto, quindi il comando corretto è finito per essere

 gradle :<subproject>:dependencies

quindi per me questo è stato

 gradle :master:dependencies

20
Bello se si potesse dire -rricorsivo
Blundell

38

Se vuoi vedere le dipendenze dal progetto e tutti i sottoprogetti utilizzati nel tuo build.gradle di primo livello:

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

Quindi chiama gradle:

gradle listAllDependencies

2
Maggiori dettagli su questo approccio nel post del blog: solidsoft.wordpress.com/2014/11/13/…
Marcin Zajączkowski

9
Puoi aggiungerlo al tuo ~/.gradle/init.gradlepiuttosto che aggiungerlo a ogni build. Quindi funziona per tutti i progetti sulla tua macchina, ma solo per te.
derekv

24

Se hai molte configurazioni, l'output potrebbe essere piuttosto lungo. Per mostrare solo le dipendenze per la configurazione runtime, eseguire

gradle dependencies --configuration runtime

15

Se vuoi che la ricorsività includa sottoprogetti, puoi sempre scriverla da solo:

Incolla nel livello superiore 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
        }
    }
}

Corri con:

gradle allDeps

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

Scriverà tutte le dipendenze nel file dependencies.txt


4

Per coloro che cercano di eseguire il debug delle dipendenze gradle nei react-nativeprogetti, il comando è (eseguito da projectname/android)

./gradlew app:dependencies --configuration compile

0

Nelle versioni recenti di Gradle (es. 5+), se esegui la build con il --scanflag, ti dice tutti i tipi di informazioni utili, comprese le dipendenze, in un browser in cui puoi fare clic.

gradlew --scan clean build

Analizzerà la schifezza di quello che sta succedendo in quella build. È abbastanza pulito.


1
ma analizza solo gli obiettivi che non hanno eseguito il grafico completo :(.
Dean Hiller

Vero! Dipende da cosa vuoi. Penso che le dipendenze solo per gli obiettivi in ​​esecuzione siano ancora più potenti. Ti dirà perché un set di comandi sembra fare la cosa sbagliata.
Ryan Shillington

Voglio davvero il grafico completo quindi non devo testare ogni nodo tbh ... diventa piuttosto noioso ... anche se ci vuole un po ', è più utile ma non vedo un modo per farlo nelle versioni più recenti.
Dean Hiller
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.