Apakah ada cara sederhana untuk menghapus dependensi yang tidak digunakan dari maven pom.xml?

277

Saya punya proyek Maven besar dengan banyak modul dan banyak pom.xmlfile. Proyek telah berubah dan saya menduga pom mengandung beberapa dependensi yang tidak perlu. Apakah ada perintah yang menghapus dependensi yang tidak digunakan dari pom?

celana
sumber
2
Jika Anda menggunakan IntelliJ, lihat ini: jonnyzzz.com/blog/2013/05/13/... Dalam kasus tautan mati: Plugin Jonnyzzz Dependencies
Benj
3
@ Benj Saya mencoba menggunakan plugin jonnyzz ini, dan itu tidak berguna. Sebagian besar waktu itu tidak akan menemukan dependensi yang tidak digunakan, dan kadang-kadang ketika itu akan menghapus dependensi dari jalur kelas bukan dari file build.gradle. Saya bahkan tidak dapat menemukan dokumen yang tepat untuk menjelaskan bagaimana plugin ini bekerja.
vaibhav.g
@ vaibhav.g terima kasih atas pembaruannya. Sepertinya hal-hal memang berubah sejak 2016 lalu.
Benj

Jawaban:

222

The Maven Ketergantungan Plugin akan membantu, terutama dependency:analyzetujuan:

dependency:analyzemenganalisis ketergantungan proyek ini dan menentukan mana yang: digunakan dan dideklarasikan; digunakan dan tidak dideklarasikan; tidak digunakan dan dideklarasikan.

Hal lain yang mungkin membantu untuk melakukan pembersihan adalah laporan Ketergantungan Konvergensi dari Plugin Maven Project Info Reports .

Thivent Pascal
sumber
5
Bagaimana saya bisa memicu ini di Eclipse?
Daniil Shevelev
134
Hati-hati dengan dependensi: analisis, beberapa perpustakaan yang digunakan saat runtime dianggap tidak digunakan.
Nereis
27
Untuk mencegah pelaporan runtime dan dependensi yang disediakan tidak digunakan, ignoreNonCompileopsi dapat disetel ke true.
sudeep
berhati-hatilah saat menggunakan dependensi: analisis, bahkan saya menggunakan 'ejp api3'depedency tetapi laporan menunjukkan itu' tidak digunakan dan dideklarasikan '
Akhil S Kamath
Untuk memahami hasil analisis, lihat jawaban ini: "Ketergantungan yang tidak dideklarasikan sebelumnya adalah yang diperlukan, tetapi belum secara eksplisit dinyatakan sebagai dependensi dalam proyek Anda." - stackoverflow.com/questions/4565740/…
Janac Meena
49

Kamu bisa memakai dependency:analyze -DignoreNonCompile

Ini akan mencetak daftar dependensi yang dideklarasikan dan tidak digunakan yang digunakan (sambil mengabaikan runtime/ provided/ test/ systemcakupan untuk analisis dependensi yang tidak digunakan.)

Hati-hati saat menggunakan ini, beberapa perpustakaan yang digunakan di runtimedianggap tidak digunakan!

Untuk lebih jelasnya lihat tautan ini

Saikat
sumber
4
[plus] 1 untuk menyebutkan runtime!
gaurav
1
Anda benar, beberapa dependensi runtime dinyatakan tidak digunakan tetapi sebenarnya diperlukan.
Smart Coder
43

Seperti yang dikatakan orang lain, Anda dapat menggunakan dependensi: menganalisis tujuan untuk menemukan dependensi mana yang digunakan dan dideklarasikan, digunakan dan tidak dideklarasikan, atau tidak digunakan dan dideklarasikan. Anda juga dapat menemukan ketergantungan: analisis-dep-mgt berguna untuk mencari ketidaksesuaian di bagian Manajemen ketergantungan Anda.

Anda cukup menghapus dependensi langsung yang tidak diinginkan dari POM Anda, tetapi jika itu diperkenalkan oleh guci pihak ketiga, Anda dapat menggunakan <exclusions>tag dalam dependensi untuk mengecualikan guci pihak ketiga (lihat bagian berjudul Pengecualian Ketergantungan untuk detail dan beberapa diskusi) . Berikut adalah contoh tidak termasuk penebangan bersama dari ketergantungan Spring:

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring</artifactId>
  <version>2.5.5</version>
  <exclusions>
    <exclusion>
      <groupId>commons-logging</groupId>
      <artifactId>commons-logging</artifactId>
    </exclusion>
  </exclusions> 
</dependency>
Penjual Kaya
sumber
3
(IntelliJ) Saya menggunakan plugin Jonnyzzz, seperti yang dikomentari pertanyaan itu. Plugin bagus, bekerja dengan baik dengan IntelliJ 2016.1.3
Benj
34

Sudahkah Anda melihat Plugin Ketergantungan Maven ? Itu tidak akan menghapus barang untuk Anda tetapi memiliki alat untuk memungkinkan Anda melakukan analisis sendiri. Saya terutama memikirkan

mvn dependency:tree
Brian Agnew
sumber
1
Sangat baik - terima kasih (tidak dapat menemukan apa yang saya cari karena saya terus mencari "dependensi bersih" dan itu memunculkan plugin bersih !! tapi ini terlihat menjanjikan .. mvn dependensi: menganalisis)
14

Saya memiliki masalah serupa dan memutuskan untuk menulis skrip yang menghapus dependensi untuk saya. Dengan menggunakan itu saya mendapatkan lebih dari setengah dependensi dengan mudah.

http://samulisiivonen.blogspot.com/2012/01/cleanin-up-maven-dependencies.html

pengguna1132305
sumber
2
Catatan, skrip ini tidak digunakan mvn dependency:analyze. Itu hanya mencoba untuk menghapus setiap ketergantungan dan memeriksa apakah mvn installberfungsi.
pelaku diet