Bağımlılık ağacını bulmak için gradle kullanma


542

Neye bağlı bir ağaç üretmek için kepçe kullanmak mümkün müdür?

Bir projem var ve tüm bağımlılıkları bulmak istiyorum, böylece ileri bildirimler vb. İle biraz budama yapabilirim.



@OliverCharlesworth cevabı yinelenen olarak işaretlemek için lütfen kapat düğmesini kullanın
030

1
@ user3286701 belki cevaplardan birini kabul edebilirdiniz?
030

5
gradle dependenciesçalışmalı. Herkes gradlew app:dependenciesmuhtemelen Android çünkü sahip olduğu deli .
prayagupd

2
@prayagupd Bu cevap olmalı. Soru, notla ilgili. Yüksek dereceli cevapları okuduktan sonra terminali açtım ve gradle kullanan genel bir projenin dizinine cd'ed. 'Gradle app: bağımlılıkları' yürüttüm ve hiçbir şey yapmayı planlamamış olsam da 'Derleme başarısız' hatası aldım. Projem iyi inşa edildi ve sadece bağımlılıkları görmek istedim.
ka3ak

Yanıtlar:


604

Android için bu satırı kullanın

 gradle app:dependencies

veya bir kepçe paketleyiciniz varsa:

./gradlew app:dependencies

appproje modülünüz nerede .

Ayrıca, bir şey olup olmadığını kontrol etmek istiyorsanız compilevs testCompilevs androidTestCompilebağımlılık yanı sıra çekerek ne:

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

10
Ah, modül adını oraya koymak zorunda kaldım. Bu yüzden ... Teşekkürler!
Jenix

Şimdi gradle çalışmaya yeni başladım, bu yüzden biraz karıştı. Gradlew'ı gradle olarak ele alabilir miyim, yani, gradlew ile gradle'larla aynı seçenekleri / komutları girebilir miyim?
Jenix

1
Eğer bir sarmalayıcı kullanıyorsanız evet @Jenix, sadece kullanmak ./gradlewyerinegradle
Çad Bingham

2
Project 'app' not found in root projectBu komutları çalıştırırken hatayı alıyorum . Ancak Benjamins çözümü işe yaradı.
18'de kroma

5
Aslında ./gradlew :dependenciesişe yarayacak. Tüm projeleriniz için bağımlılıkları listeleyecektir, ancak doğru olanı bulmak kolaydır.
dirkjot

240

Bağımlılık ağacını komutla oluşturabilirsiniz gradle dependencies. Daha fazla bilgi için 11.6.4 Çevrimiçi kullanıcı kılavuzundaki proje bağımlılıklarını listeleme bölümüne bakın .


2
Bunu Android projemle yaptığımda, elde ettiğim tek şey şu çıktı: pastebin.com/fHFigAuY Öneriler?
Nilzor

3
@Nilzor Muhtemelen yanlış dizinde ( build.gradledosyayı içermeyen ) komutu yürütüyorsunuz veya derleme dosyanız herhangi bir eklenti uygulamaz.
Benjamin Muschko



3
./gradlew dependencies
Sarıcı

152

Konsolunun çıktısında gezinmekte zorlanıyorsanız gradle dependencies, Proje raporları eklentisini ekleyebilirsiniz :

apply plugin: 'project-report'

Ve aşağıdakileri kullanarak bir HTML raporu oluşturun:

$ ./gradlew htmlDependencyReport

Rapor normalde şurada bulunabilir: build/reports/project/dependencies/index.html

Şöyle görünüyor: resim açıklamasını buraya girin


2
Benim için sadecegradle htmlDependencyReport
Richard Tingle

2
Bu, çok modüllü projeler için geçerli değildir. Sadece bir liste görüyorum.
Adam Arold

1
Büyük bulmak. Eklenti aslında daha fazla docs.gradle.org/current/userguide/project_report_plugin.html
ruX

78

Android Studio'da (en azından v2.3.3'ten beri) komutu doğrudan kullanıcı arayüzünden çalıştırabilirsiniz:

Tıklayın Gradle sekmesini ve ardından çift tıklayın üzerine : yourmodule -> Görevler -> android -> androidDependencies

Ağaç Gradle Console sekmesinde görüntülenir

Bir görüntü bin kelimeye bedeldir


1
"proje projeleri" görünümünü nasıl edinebilirim?
user3526

1
@ user3526 ekranınızın sağ tarafında bulunan "not defteri" etiketine tıklayın. Ekli resme referans için bakınız
Nicolás Carrasco

2
Bunun AS 3.2.0'da bir ağaç yerine düz bir liste oluşturduğunu gördüm. Ancak komut satırı varyantı bir ağaç oluşturur.
Tom

5
@ 'Android' değil, 'yardım' kategorisi altında 'bağımlılıklar' görevini çalıştırın. Ağaç olarak gösterir
Maxim Berezovsky

27

Genellikle tam test, compileve androidTestCompilebağımlılık grafiği birlikte incelenmek için çok fazladır. Sadece compilebağımlılık grafiğini kullanmak istiyorsanız:

./gradlew app:dependencies --configuration compile

Kaynak: Gradle docs bölümü 4.7.6

Not: compileGradle'ın daha yeni sürümlerinde kullanımdan kaldırılmıştır ve daha yeni sürümlerde tüm compilebağımlılıklarınızı değiştirmeniz önerilir implementation. Lütfen bu yanıtı burada görün


4
sadece bir not: derleme kullanımdan kaldırıldı, insanlar şimdi uygulamaya geçmelidir
reinaldomoreira

25

Bağımlılıklarınızı bir grafikte görselleştirmek istiyorsanız, dereceye bağımlılık-grafik oluşturucu eklentisini kullanabilirsiniz.

Genellikle bu eklentinin çıktısı derleme / raporlar / bağımlılık-grafik dizininde bulunabilir ve eklentinin 0.5.0 sürümünü kullanıyorsanız üç dosya (.dot | .png | .svg) içerir.

Gerçek bir uygulamadaki bağımlılık grafiği örneği ( Satranç Saati ):

grafik


Hey David, eklenti talimatlarında anlatıldığı gibi yaptım. Proje sınıfına eklenti uyguladım, ancak derleme dizininde herhangi bir rapor klasörü göremiyorum. Projeyi derlemek ve yürütmekten başka yapmamız gereken bir şey var mı?
Rushi M Thakker

Bu eklenti bağımlılık sürümünü ve çakışmaları göstermez. Maven için böyle; github.com/janssk1/maven-graph-plugin/wiki/Manual Bu işe yaramaz hale getirir ..
sytolk

18

Android için bunu terminale yazın

gradlew app:dependencies

Tüm bağımlılıkları ve daha yeni sürümlere sahip olanları listeleyecektir.

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

15

Gradle'da işler ilerledi, bu yüzden bu sorunun başka bir cevabı hak ettiğine inanıyorum.
Gradle 4.3'ten beri, " tarama taramaları " tanıtıldı. İlgili tüm bilgiler Gradle belgelerinde mevcuttur ( 1 , 2 ). Benim için, bu şimdi bağımlılıklarınızı (ve genel olarak yapınızı) açık ve düzenli bir şekilde kontrol etmenin en kolay yolu gibi görünüyor.

Oluşturmaları çok kolaydır, sadece çalıştırın:

gradle build --scan  

(veya ./gradlew build --scanbir sarıcı kullanıyorsanız)

Bu, taramanızı görebileceğiniz rastgele oluşturulmuş bir bağlantı oluşturur. Bu bağlantıyı açarken, e-postanızı girer ve bağlantı üzerinde tam kontrol sahibi olursunuz: örn. paylaşın veya silin. Bu var Yapınızda hakkında bilgi çok , sadece bağımlılıkları değil. Bağımlılıklarınızı, hiyerarşilerini, bunları elde etmek için kullanılan havuzu değil, aynı zamanda yapınızla ilgili diğer birçok şeyi, yani performansını (büyük karmaşık yapılarla ilgilenen), testlerinizi, hatta konsol çıktınızı ve JDK ve JVM kullanılan sistem yapılandırması, maksimum yığın boyutu vb.

Bu, sahte bir projenin bir baskı ekranıdır:

Tarama örneği oluşturma

Yapı taraması, ne olduğuna ve nedenine dair bilgi sağlayan bir yapının paylaşılabilir kaydıdır. Scans.gradle.com adresinde ücretsiz olarak bir yapı taraması oluşturabilirsiniz.

Ancak, oluşturma işleminizle ilgili bilgilerin Gradle sunucularına gönderileceğini unutmayın. İncelemeniz bittiğinde silmek için tam kontrole sahipsiniz.

Son olarak, 4.3'ten önceki Gradle sürümleriyle derleme taramaları da kullanabilirsiniz, sadece tarama eklentisini derlemenize manuel olarak eklemeniz gerekir.

Düzenleme :
yorumlardan bazı geri bildirimler dahil bazı ekstra notlar:
1) Yanlışlıkla veya yapınız için bazı bilgilerin çevrimiçi (size özel, silme yeteneği ile, ama hala çevrimiçi olacağını anlamadan bunu yapmak çok zordur ).

gradle build --scanAşağıdaki mesaj yürütülürken görünür:

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]

Açık bir şekilde yazmanız gerekir yesve daha sonra mesaj devam eder:

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

2) Gradle Enterprise'da, gradle derlemesi taramalarını kendi sunucularınızda barındırabilirsiniz. Ancak bu konuda hiçbir deneyimim yok ve önerilen yaklaşımım standart Gradle dağıtımı hakkındaydı.

3) Gradle'ın kendisi, derleme sorunlarının çoğunu ele almanın bir yolu olarak derleme taramalarını destekler.


11
Cevabı küçümsemek için üzgünüz, ancak IMO soruyu cevaplamıyor ve gradle build --scanyapınızın ayrıntılarını internette bir yerde yayınladığınız ve bunu silmek için çalışan e-posta adresiyle ilişkilendirmeniz gerektiği konusunda yeterince uyarı vermiyor .
Michal

1
Merhaba Michal, eğer böyle hissedersen inat edebilirsin. Ancak sormam gerekiyor, denedin mi? Yürütürken gradle build --scancmd, sen istenir: 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]. Manuel olarak yazmalısınız yes. Bundan hemen sonra, mesajı alırsınız: Publishing build scan... https://gradle.com/s/a12en0dasdu(aynı türden rastgele bir link koyun). Bu yüzden sizi daha önce uygun şekilde uyardığına inanıyorum. (1/2)
tryman

1
Bağlantıyı ziyaret edebilir ve e-posta veya herhangi bir şey yapmadan taramayı hemen silebilirsiniz. Cevap olarak, soruyu cevapladığına inanıyorum . Aslında, diğer yaklaşımlara kıyasla, bağımlılıklarınız hakkında ekstra bilgi (ve ekstra mil: tüm yapı için de ekstra bilgi) gösterir. Eğer beğeninize bulamıyorsanız, bu tamamdır, ancak şu anda (bence) iş için en kapsamlı araçtır, bu yüzden bunu akılda tutmak değerlidir. Son olarak, Gradle tarafından tanıtıldı, kelimenin tam anlamıyla ilk rehberleri (2/2)
tryman

@Michal Üzgünüm, daha önce etiketlememi unuttum, bu yüzden yorumlarımı görmemiş olabilirsiniz. (Ayrıca, size yanıtladığım yorumları dahil etmek için
yazıyı

2
Bunu denemedim - şartların kabulü hakkında açıklık için teşekkürler. -1imi kaldırdım.
Michal

9

Android Studio'da

1) Terminali açın ve projenin kök klasöründe olduğunuzdan emin olun.

2) Çalıştır ./gradlew app:dependencies (kepçe sarıcısı kullanmıyorsanız deneyin gradle app:dependencies)

Çalıştıran Not ./gradle dependenciessadece yukarıda şekilde uygulamayı söz yüzden, size projenin kök klasörünün bağımlılık ağacını verecektir yani ./gradlew app:dependenciesönemlidir.


1
benim için "./" olmadan çalıştı, şunun gibi: gradlew app: bağımlılıklar.
Gilad Levinson

7

Ayrıca bu çalıştırmak için yararlı buldum:

./gradlew dI --dependency <your library>

Bu, bağımlılıkların nasıl çözüldüğünü ( dependencyInsight) gösterir ve kütüphanenizdeki kitaplıkları nereye zorlamanız veya hariç tutmanız gerektiğinde hata ayıklamanıza yardımcı olurbuild.gradle

Bkz. Https://docs.gradle.org/current/userguide/tutorial_gradle_command_line.html


Söylediğin gibi deniyorum ama işe yaramadı :( stackoverflow.com/questions/49646103/…
loki

7

./gradlew <module_directory>:<module_name>:dependenciesModülün build.gradle dosyasına erişmeden önce fazladan bir dizine sahip olması durumunda, böyle bir şey yapmanız gerekebileceğini unutmayın. Şüphe duyduğunuzda, ./gradlew tasks --alladı kontrol edin.


7

Benim için bu sadece bir emirdi

build.gradle ekle plugin

apply plugin: 'project-report'

ve cmd'ye gidin ve aşağıdaki komutu çalıştırın

./gradlew htmlDependencyReport

Bu bana bir HTML raporu verir WOW Html raporu 💕

Hepsi efendim.


Bu cevap zaten Devstr.
brute_force

Evet, Teşekkürler @brute_force O zaman bana görünmüyordu. Ne istiyorsun, cevabımı kaldır?
Dupinder Singh

1

Gradle'ın son sürümleri için (6.4.1 sürümü ile test ettim):

gradle dependencies --configuration compileClasspath

veya Gradle Wrapper'ı kullanıyorsanız:

gradlew dependencies --configuration compileClasspath

0

Tüm bağımlılıkları iki adımda sonunda tek bir dosyada istiyorsanız. Bunu build.gradle.ktsprojenizin kök dizinine ekleyin:

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

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

}

Sonra uygulayın:

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

Bu, projenizdeki ve alt projelerinizdeki tüm bağımlılıkları ve tüm 3. taraf bağımlılıklarını size verecektir.

Bunu programlı bir şekilde yapmak istiyorsanız, bağımlılıkların özel bir oluşturucusuna ihtiyacınız olacaktır - AsciiDependencyReportRenderervarsayılan olarak bağımlılıkların bir ascii grafiğini bastırarak başlatabilirsiniz .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.