¿Qué es el comando Gradle artifact dependency graph?

123

Leí este comentario en los documentos de 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.

Tengo algún tipo de jarra que traigo pero necesito averiguar de dónde viene. Normalmente lo excluiría globalmente, pero necesito información sobre la jerarquía aquí. ¿Cómo obtengo esta información como puedo de Ivy y Maven?

Sin mencionar que alguien está trayendo frascos de Hibernate (mucho) a mi lista de jarros y realmente quiero saber quién, ya que no estoy usando Hibernate e intento cortar esa dependencia.

Dean Hiller
fuente

Respuestas:

127

El comando es gradle dependencies, y su salida se ha mejorado mucho en Gradle 1.2. (Ya puedes probar 1.2-rc-1 hoy).

Peter Niederwieser
fuente
en realidad, intenté eso ... me di cuenta de que mis dependencias están en mi subproyecto de nivel más bajo (es decir, el que todos dependen) y no en el proyecto principal ... no estoy seguro de si eso es malo o bueno en este momento .
Dean Hiller
Debe ejecutar el comando para el proyecto en particular que le interese. Por lo general, debería cd en el directorio del proyecto y ejecutar el comando desde allí.
Peter Niederwieser
9
Esto no funciona en todo tipo de proyectos. Estoy obteniendo 'Sin configuraciones' y necesito ejecutar algo más para que esto funcione. Esperemos que algún día Gradle maneje esto para que los comandos reales sean predecibles.
R. van Twisk
2
¿Hay una bandera para incluir dependencias transitivas?
thetwan
1
Se incluyen automáticamente.
Peter Niederwieser
121

Ah, como no tenía dependencias en mi proyecto maestro, "dependencias de gradle" solo enumera esas y no dependencias de subproyectos, por lo que el comando correcto terminó siendo

 gradle :<subproject>:dependencies

así que para mí esto fue

 gradle :master:dependencies
Dean Hiller
fuente
20
Agradable si pudieras decir -rrecursivo
Blundell
38

Si desea ver las dependencias en el proyecto y todos los subproyectos, use en su build.gradle de nivel superior:

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

Entonces llame a gradle:

gradle listAllDependencies
usuario1707414
fuente
2
Más detalles sobre ese enfoque en la publicación del blog: solidsoft.wordpress.com/2014/11/13/…
Marcin Zajączkowski
9
Puede agregar esto a su en ~/.gradle/init.gradlelugar de agregarlo a cada compilación. Entonces funciona para todos los proyectos en su máquina, pero solo para usted.
derekv
24

Si tienes muchas configuraciones, la salida puede ser bastante larga. Para mostrar solo las dependencias para la configuración de tiempo de ejecución, ejecute

gradle dependencies --configuration runtime
icyerasor
fuente
15

Si desea que recursivo incluya subproyectos, siempre puede escribirlo usted mismo:

Pegar en el nivel superior 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
        }
    }
}

Corre con:

gradle allDeps
Renato
fuente
5
gradlew -q :app:dependencies > dependencies.txt

Escribirá todas las dependencias en el archivo dependencies.txt

abitcode
fuente
4

Para aquellos que buscan depurar dependencias de gradle en react-nativeproyectos, el comando es (ejecutado desde projectname/android)

./gradlew app:dependencies --configuration compile
pscl
fuente
0

En versiones recientes de Gradle (es decir, 5+), si ejecuta su compilación con el --scanindicador, le informa todo tipo de información útil, incluidas las dependencias, en un navegador donde puede hacer clic.

gradlew --scan clean build

Analizará la basura de lo que está sucediendo en esa compilación. Es muy lindo.

Ryan Shillington
fuente
1
pero solo analiza los objetivos que no se ejecutaron en el gráfico completo :(.
Dean Hiller
¡Cierto! Depende de lo que quieras. Creo que las dependencias solo para los objetivos que se ejecutaron son aún más poderosas. Te dirá por qué un conjunto de comandos parece hacer lo incorrecto.
Ryan Shillington
Realmente quiero el gráfico completo, así que no tengo que probar cada nodo tbh ... eso se vuelve bastante tedioso ... incluso si lleva un tiempo, es más útil, pero no veo una manera de hacerlo en las versiones más nuevas
Dean Hiller