Apa itu perintah grafik ketergantungan artefak Gradle?


123

Saya membaca komentar ini di dokumen 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.

Aku punya semacam toples yang sedang dibawa tapi aku perlu mencari tahu dari mana asalnya. Biasanya saya hanya akan mengecualikannya secara global, tetapi saya memerlukan beberapa informasi tentang hierarki di sini. Bagaimana cara mendapatkan informasi ini seperti yang saya dapat dari Ivy dan Maven?

Belum lagi seseorang membawa stoples Hibernate (banyak) ke dalam daftar stoples saya dan saya benar-benar ingin tahu siapa karena saya tidak menggunakan Hibernate dan mencoba menghilangkan ketergantungan itu.

Jawaban:


127

Perintahnya adalah gradle dependencies, dan hasilnya jauh lebih baik di Gradle 1.2. (Anda sudah dapat mencoba 1.2-rc-1 hari ini.)


sebenarnya, saya mencobanya .... Saya menyadari ketergantungan saya berada di subproyek tingkat terendah saya (yaitu yang bergantung pada semua orang) dan bukan dalam proyek utama ... tidak yakin apakah itu buruk atau baik pada saat ini .
Dean Hiller

Anda perlu menjalankan perintah untuk proyek tertentu yang Anda minati. Biasanya, Anda akan masuk ke direktori proyek dan menjalankan perintah dari sana.
Peter Niederwieser

9
Ini tidak berfungsi pada semua jenis proyek. Saya mendapatkan 'Tidak ada konfigurasi' dan perlu menjalankan sesuatu yang lain untuk menjalankan ini. Mudah-mudahan suatu hari nanti gradle akan menangani ini sehingga perintah yang sebenarnya akan menjadi predikatble.
R. van Twisk

2
Apakah ada tanda untuk menyertakan dependensi transitif?
thetwan

1
Mereka disertakan secara otomatis.
Peter Niederwieser

121

Ah, karena saya tidak memiliki ketergantungan dalam proyek master saya, "ketergantungan gradle" hanya mencantumkan itu dan bukan ketergantungan subproyek sehingga perintah yang benar akhirnya menjadi

 gradle :<subproject>:dependencies

jadi bagi saya ini

 gradle :master:dependencies

20
Bagus jika Anda bisa mengatakan -runtuk rekursif
Blundell

38

Jika Anda ingin melihat ketergantungan pada proyek dan semua subproyek digunakan dalam build.gradle tingkat atas Anda:

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

Kemudian panggil gradle:

gradle listAllDependencies

2
Detail lebih lanjut tentang pendekatan itu di entri blog: solidsoft.wordpress.com/2014/11/13/…
Marcin Zajączkowski

9
Anda dapat menambahkan ini ke Anda ~/.gradle/init.gradledaripada menambahkannya ke setiap bangunan. Kemudian berfungsi untuk semua proyek di mesin Anda, tetapi hanya untuk Anda.
derekv

24

Jika Anda mendapatkan banyak konfigurasi, hasilnya mungkin cukup panjang. Untuk hanya menampilkan dependensi untuk konfigurasi runtime, jalankan

gradle dependencies --configuration runtime

15

Jika Anda ingin rekursif memasukkan subproyek, Anda selalu dapat menulisnya sendiri:

Tempel ke tingkat atas 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
        }
    }
}

Jalankan dengan:

gradle allDeps

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

Akan menulis semua dependensi ke file dependencies.txt


4

Bagi mereka yang ingin men-debug dependensi gradle dalam react-nativeproyek, perintahnya adalah (dijalankan dari projectname/android)

./gradlew app:dependencies --configuration compile

0

Dalam versi Gradle terbaru (mis. 5+), jika Anda menjalankan build dengan --scanflag, ini memberi tahu Anda semua jenis informasi yang berguna, termasuk dependensi, di browser tempat Anda dapat mengklik.

gradlew --scan clean build

Ini akan menganalisis omong kosong dari apa yang terjadi di bangunan itu. Cukup rapi.


1
tetapi hanya menganalisis target yang tidak menjalankan grafik lengkap :(.
Dean Hiller

Benar! Itu tergantung pada apa yang Anda inginkan. Saya pikir ketergantungan hanya untuk target yang berjalan bahkan lebih kuat. Ini akan memberi tahu Anda mengapa satu set perintah tampaknya melakukan hal yang salah.
Ryan Shillington

Saya benar-benar ingin grafik lengkap jadi saya tidak perlu menguji setiap node tbh .... itu menjadi sangat membosankan .... meskipun membutuhkan beberapa saat, ini lebih berguna tetapi saya tidak melihat cara untuk melakukannya itu di versi yang lebih baru.
Dean Hiller
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.