Bagaimana cara mendapatkan pohon ketergantungan untuk artefak?

123

dependency:treedapat digunakan untuk melihat pohon ketergantungan untuk proyek tertentu. Tapi yang saya butuhkan adalah melihat pohon ketergantungan untuk artefak pihak ketiga.

Saya kira saya dapat membuat proyek kosong, tetapi saya mencari sesuatu yang lebih mudah (saya perlu melakukan ini untuk beberapa artefak).

IttayD
sumber

Jawaban:

158

1) Gunakan plugin ketergantungan maven

Buat proyek sederhana hanya dengan pom.xml. Tambahkan ketergantungan Anda dan jalankan:

mvn dependency:tree

Sayangnya ketergantungan mojo harus menggunakan pom.xml atau Anda mendapatkan kesalahan berikut:

Tidak dapat mengeksekusi mojo: tree. Ini membutuhkan proyek dengan pom.xml yang sudah ada, tetapi build tidak menggunakannya.

2) Temukan pom.xml artefak Anda di repositori pusat maven

Dependensi dijelaskan dalam pom.xml artefak Anda. Temukan menggunakan infrastruktur maven.

Buka http://search.maven.org/ dan masukkan groupId dan artifactId Anda.

Atau Anda dapat membuka http://repo1.maven.org/maven2/ dan menavigasi terlebih dahulu menggunakan plugin groupId, kemudian menggunakan artifactId dan terakhir menggunakan versinya.

Misalnya lihat org.springframework: spring-core

3) Gunakan plugin ketergantungan maven terhadap artefak Anda

Bagian dari artefak ketergantungan adalah pom.xml. Itu menentukan ketergantungannya. Dan Anda dapat menjalankan dependensi mvn: tree di pom ini.

amra
sumber
3
Seperti yang saya katakan, saya ingin menghindari kebutuhan untuk membuat proyek
IttayD
Anda tidak sedang 'membuat' proyek, Anda hanya mengunduh file POM.
Sean Patrick Floyd
1
Anda tidak perlu membuat proyek baru. Lihat saja ke dalam repositori lokal Anda dan temukan pom.xml
atifact
Ini tidak bekerja jika modul anak tidak ada. misalnya `` `` 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 dependen dency: tree [INFO] Memindai project ... [ERROR] [ERROR] Beberapa masalah ditemukan saat memproses POM: [ERROR] Child module ~ / .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 tidak ada ``
Ding-Yi Chen
1
Untuk proyek Maven multi-modul (yaitu proyek dengan beberapa pom.xmlfile) Anda mungkin mendapatkan kesalahan. Kalau mvn compile dependency:treebegitu coba .
izogfif
49

Jika Anda repot-repot membuat proyek sampel dan menambahkan dependensi pihak ke-3 Anda, maka Anda dapat menjalankan yang berikut untuk melihat hierarki lengkap dependensi.

Anda dapat mencari artefak tertentu menggunakan perintah maven ini:

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

Menurut dokumentasi:

dengan setiap segmen pola bersifat opsional dan mendukung karakter pengganti penuh dan parsial *. Segmen pola kosong diperlakukan sebagai karakter pengganti implisit.

Bayangkan Anda mencoba menemukan file jar 'log4j-1.2-api' di antara berbagai modul proyek Anda:

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

informasi lebih lanjut dapat ditemukan di sini .

Sunting: Harap dicatat bahwa meskipun keuntungan menggunakan parameter verbose , mungkin tidak begitu akurat dalam beberapa kondisi. Karena menggunakan algoritma Maven 2 dan dapat memberikan hasil yang salah jika digunakan dengan Maven 3.

Kayvan Tehrani
sumber
2
Saran bagus! -Dverbosecukup untuk menunjukkan kepada saya pohon lengkap yang saya butuhkan. Menyalurkan output ke lessatau serupa dan melakukan pencarian cepat berfungsi dengan baik jika Anda tidak dapat mengingat includesbenderanya atau tidak ingin memberikan yang lengkap atau karakter pengganti groupId:)
jocull
Ini tidak berfungsi tanpa hadiah pom.xml yang berisi artefak yang Anda lihat. Jika tidak, Anda mendapatkan[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 sudah tidak digunakan lagi di plugin dependensi, jadi ini tidak berfungsi lagi kecuali Anda menggunakan versi yang cukup lama.
pemalsu alat
6

Solusinya adalah dengan memanggil ketergantungan: pohon dengan file pom.xml artefak:

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

Lihat juga Bagaimana cara membuat daftar dependensi transitif dari sebuah artefak dari repositori?

Matthias M
sumber
Ini mungkin tidak berfungsi dengan artefak yang diunduh dari repositori pusat, karena 'distributionManagement.status'. Itu ditambahkan oleh repositori pusat pada unggahan. Dan ini akan membuat ketergantungan: validasi gagal pohon pada file pom. Lihat issues.apache.org/jira/browse/MNG-3178
Arnaud Jeansen
2

Jika Anda menggunakan m2eclipse versi terbaru (yang harus Anda gunakan jika menggunakan eclipse dan maven):

Pilih entri menu

Navigate -> Open Maven POM

dan masukkan artefak yang Anda cari.

Pom akan terbuka di editor pom, dari mana Anda dapat memilih tab Dependency Hierarchyuntuk melihat hierarki ketergantungan (seperti namanya :-))

Sean Patrick Floyd
sumber
2
Oke, maka jawaban ini untuk pengguna lain :-)
Sean Patrick Floyd
1

Jika artefak Anda tidak bergantung pada proyek tertentu, taruhan terbaik Anda adalah menggunakan mesin pencari repositori . Banyak dari mereka menggambarkan ketergantungan artefak tertentu.

Pascal Thivent
sumber
artefak yang saya minati adalah bagian dari produk perusahaan
IttayD
maka jawaban amra adalah taruhan terbaik Anda, saya khawatir.
Sean Patrick Floyd
@IttayD: Mengapa Anda tidak menyebutkan detail penting semacam ini dalam pertanyaan Anda? Ini akan membantu untuk mendapatkan jawaban yang lebih baik IMHO (dan mungkin juga membantu pembaca untuk tidak membuang waktu mereka).
Pascal Thivent
0

Jika Anda ingin mendapatkan representasi grafik yang dapat dicari dari pohon ketergantungan (termasuk semua modul dari proyek Anda, ketergantungan transitif, dan informasi penggusuran), lihat UpdateImpact: https://app.updateimpact.com (layanan gratis).

Penafian: Saya salah satu pengembang situs ini

adamw
sumber
0

Saya tahu posting ini sudah cukup lama, tapi tetap saja, jika ada yang menggunakan IntelliJ ingin melihat pohon ketergantungan langsung di IDE maka mereka dapat menginstal plugin Maven Helper Plugin .

Setelah terinstal, buka pom.xml dan Anda akan melihat tab Analisis Ketergantungan seperti di bawah ini. Ini juga menyediakan opsi untuk melihat ketergantungan yang hanya berkonflik dan juga sebagai struktur pohon.

masukkan deskripsi gambar di sini

rns
sumber