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?


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 .


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


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>

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

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)

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.