Bir yapı için bir bağımlılık ağacı nasıl elde edilir?


123

dependency:treebelirli bir proje için bağımlılık ağacını görmek için kullanılabilir. Ancak ihtiyacım olan şey, bir 3. parti eser için bağımlılık ağacını görmek.

Sanırım boş bir proje oluşturabilirim, ancak daha kolay bir şey arıyorum (bunu birkaç eser için yapmam gerekiyor).

Yanıtlar:


158

1) Kullanım Maven bağımlılık eklentisini

Yalnızca pom.xml ile basit bir proje oluşturun. Bağımlılığınızı ekleyin ve çalıştırın:

mvn dependency:tree

Maalesef bağımlılık mojo'nun pom.xml kullanması gerekir veya aşağıdaki hatayı alırsınız:

Mojo: tree yürütülemiyor. Mevcut bir pom.xml ile bir proje gerektirir, ancak yapı bir tane kullanmıyor.

2) Yapıtınızın pom.xml'sini maven merkezi deposunda bulun

Bağımlılıklar, yapınızın pom.xml'sinde açıklanmıştır. Maven altyapısını kullanarak bulun.

Git http://search.maven.org/ ve GroupID ve artifactId girin.

Veya http://repo1.maven.org/maven2/ adresine gidebilir ve ilk olarak plugins groupId kullanarak, daha sonra artifactId kullanarak ve son olarak da onun sürümünü kullanarak gezinebilirsiniz.

Örneğin bakınız org.springframework: spring-core

3) Yapıtınıza karşı maven bağımlılık eklentisini kullanın

Bağımlılık yapısının bir parçası bir pom.xml'dir. Bu, bağımlı olduğunu belirtir. Ve mvn bağımlılığını çalıştırabilirsiniz : bu pomda ağaç .


3
Dediğim gibi, bir proje yaratma ihtiyacından kaçınmak istiyorum
IttayD

bir proje 'oluşturmuyorsunuz', sadece bir POM dosyası indiriyorsunuz.
Sean Patrick Floyd

1
Yeni bir proje oluşturmanıza gerek yok. Yerel deponuza bir göz atın ve atifact'ın pom.xml'sini bulun
amra

Alt modül yoksa bu çalışmaz. ör. `` mvn -f ~ / .m2 / repository / org / jboss / shrinkwrap / descriptors / shrinkwrap-descriptors-parent / 2.0.0-alpha-10 / shrinkwrap-descriptors-parent-2.0.0-alpha-10. pom depen dency: tree [INFO] Projeler taranıyor ... [ERROR] [ERROR] POM'ları işlerken bazı sorunlarla karşılaşıldı: [ERROR] Alt modül ~ / .m2 / repository / org / jboss / shrinkwrap / descriptors / shrinkwrap -descriptors-parent / 2.0.0-alpha-10 / api-base of ... / descriptors-parent / 2.0.0-alpha-10 / shrinkwrap-descriptors-parent-2.0.0-alpha-10.pom bunu yapmaz var ``
Ding-Yi Chen

1
Çok modüllü Maven projesi için (yani birkaç dosyalı proje pom.xml) hata alabilirsiniz. Deneyin mvn compile dependency:treeo zaman.
izogfif

49

Örnek bir proje oluşturmayı ve buna 3. taraf bağımlılığınızı eklemeyi zahmet ediyorsanız, bağımlılıkların tam hiyerarşisini görmek için aşağıdakileri çalıştırabilirsiniz.

Bu maven komutunu kullanarak belirli bir yapıyı arayabilirsiniz :

mvn dependency:tree -Dverbose -Dincludes=[groupId]:[artifactId]:[type]:[version]

Belgelere göre:

burada her desen segmenti isteğe bağlıdır ve tam ve kısmi * joker karakterleri destekler. Boş bir desen segmenti, örtük bir joker karakter olarak değerlendirilir.

Projenizin farklı modülleri arasında 'log4j-1.2-api' jar dosyasını bulmaya çalıştığınızı hayal edin:

mvn dependency:tree -Dverbose -Dincludes=org.apache.logging.log4j:log4j-1.2-api

daha fazla bilgiyi burada bulabilirsiniz .

Düzenleme: Ayrıntılı parametre kullanmanın avantajlarına rağmen, bazı koşullarda bu kadar doğru olmayabileceğini lütfen unutmayın . Çünkü Maven 2 algoritmasını kullanıyor ve Maven 3 ile birlikte kullanıldığında yanlış sonuçlar verebilir.


2
Harika bir öneri! -Dverbosebana ihtiyacım olan ağacın tamamını göstermeye yetti. Bayrağı lesshatırlayamıyorsanız includesveya tam veya joker karakterli groupId
olanı

Bu, bakmakta olduğunuz eseri içeren bir pom.xml hediyesi olmadan çalışmaz. Aksi takdirde[ERROR] Failed to execute goal org.apache.maven.plugins:maven-dependency-plugin:2.8:tree (default-cli): Goal requires a project to execute but there is no POM in this directory (...). Please verify you invoked Maven from the correct directory. -> [Help 1]
Eisenknurr

-Dverbose, bağımlılık eklentisinde kullanımdan kaldırıldı, bu nedenle oldukça eski bir sürüm kullanmadığınız sürece bu artık çalışmıyor.
toolforger

6

Çözüm, yapının pom.xml dosyasıyla bağımlılık: ağacı çağırmaktır:

mvn -f "$HOME/.m2/repository/$POM_PATH" dependency:tree

Ayrıca bkz. Depodaki bir yapının geçişli bağımlılıkları nasıl listelenir?


Bu, 'dağıtımManagement.status' nedeniyle merkezi bir depodan indirilen yapılarla çalışmayabilir. Yükleme sırasında merkezi depo tarafından eklenir. Ve bu bağımlılık yaratacaktır: ağaç, pom dosyasında doğrulama başarısız olur. Bkz issues.apache.org/jira/browse/MNG-3178
Arnaud Jeansen

2

Güncel bir m2eclipse sürümü kullanıyorsanız (tutulma ve maven kullanıyorsanız kullanmanız gerekir):

Menü girişini seçin

Navigate -> Open Maven POM

ve aradığınız eseri girin.

Pom Dependency Hierarchy, bağımlılık hiyerarşisini görüntülemek için sekmeyi seçebileceğiniz pom düzenleyicide açılacaktır (adından da anlaşılacağı gibi :-))


2
Tamam, o zaman bu cevap diğer kullanıcılar için :-)
Sean Patrick Floyd

1

Yapıtınız belirli bir projenin bağımlılığı değilse, en iyi seçeneğiniz bir arşiv arama motoru kullanmaktır . Birçoğu belirli bir yapının bağımlılıklarını tanımlar.


ilgilendiğim eserler bir şirket ürününün parçası
IttayD

o zaman amra'nın cevabı en iyi bahsinizdir, korkarım.
Sean Patrick Floyd

@IttayD: Sorunuzda neden bu tür önemli ayrıntılardan bahsetmiyorsunuz ? Bu, daha iyi yanıtlar almanıza yardımcı olur IMHO (ve okuyucuların zamanlarını boşa harcamamalarına da yardımcı olabilir).
Pascal Thivent

0

Bağımlılık ağacının grafiksel, aranabilir bir temsilini (projenizdeki tüm modüller, geçişli bağımlılıklar ve tahliye bilgileri dahil) almak isterseniz, UpdateImpact'e göz atın: https://app.updateimpact.com (ücretsiz hizmet) 'e bakın.

Feragatname: Sitenin geliştiricilerinden biriyim


0

Bu yazının oldukça eski olduğunu biliyorum, ancak yine de, IntelliJ kullanan herhangi biri doğrudan IDE'de bağımlılık ağacını görmek isterse, Maven Helper Plugin'i yükleyebilir. eklentisini .

Bir kez yüklendikten sonra pom.xml'yi açın ve aşağıdaki gibi Bağımlılık Analizi sekmesini görebilirsiniz . Ayrıca, yalnızca çakışan bağımlılığı ve ayrıca bir ağaç yapısı olarak görme seçeneği de sağlar.

görüntü açıklamasını buraya girin

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.