Có cách nào đơn giản để loại bỏ các phụ thuộc không sử dụng khỏi maven pom.xml không?


277

Tôi có một dự án Maven lớn với nhiều mô-đun và nhiều pom.xmltệp. Dự án đã thay đổi và tôi nghi ngờ pom chứa một số phụ thuộc không cần thiết. Có một lệnh loại bỏ bất kỳ phụ thuộc không sử dụng từ một pom?


2
Nếu bạn đang sử dụng IntelliJ, hãy xem điều này: jonnyzzz.com/blog/2013/05/13/ nam Trong trường hợp liên kết chết: Plugin Jonnyzzz Dependencies
Ngày

3
@Benj Tôi đã thử sử dụng plugin jonnyzz này và nó vô dụng. Hầu hết thời gian nó sẽ không tìm thấy bất kỳ phụ thuộc không sử dụng nào, và đôi khi khi nó sẽ loại bỏ các phụ thuộc khỏi đường dẫn lớp không phải từ tệp build.gradle. Tôi thậm chí không thể tìm thấy tài liệu thích hợp để giải thích cách plugin này thực sự hoạt động.
vaibhav.g

@ vaibhav.g cảm ơn đã cập nhật. Có vẻ như mọi thứ đã thay đổi kể từ năm 2016 sau đó.
Benj

Câu trả lời:


222

Các Maven phụ thuộc Plugin sẽ giúp đỡ, đặc biệt là các dependency:analyzemục tiêu:

dependency:analyzephân tích các phụ thuộc của dự án này và xác định đó là: được sử dụng và khai báo; sử dụng và không khai báo; không sử dụng và khai báo.

Một điều khác có thể giúp thực hiện một số dọn dẹp là báo cáo Sự hội tụ phụ thuộc từ Plugin Báo cáo thông tin dự án Maven .


5
Làm thế nào tôi có thể kích hoạt điều này trong Eclipse?
Daniil Shevelev

134
Hãy cẩn thận với sự phụ thuộc: phân tích, một số thư viện được sử dụng trong thời gian chạy được coi là không sử dụng.
Nereis

27
Để ngăn báo cáo thời gian chạy và cung cấp các phụ thuộc là không sử dụng, ignoreNonCompiletùy chọn có thể được đặt thành đúng.
sudeep

hãy cẩn thận trong khi sử dụng sự phụ thuộc: phân tích, thậm chí tôi đã sử dụng 'ejp api3'depedency nhưng báo cáo cho thấy nó' không được sử dụng và tuyên bố '
Akhil S Kamath

Để hiểu kết quả phân tích, hãy xem câu trả lời này: "Các phụ thuộc chưa được sử dụng là những thứ bắt buộc, nhưng chưa được tuyên bố rõ ràng là phụ thuộc trong dự án của bạn." - stackoverflow.com/questions/4565740/
Mạnh

49

Bạn có thể dùng dependency:analyze -DignoreNonCompile

Điều này sẽ in một danh sách các phụ thuộc được khai báo chưa sử dụngchưa sử dụng (trong khi bỏ qua runtime/ provided/ test/ systemphạm vi để phân tích phụ thuộc không sử dụng.)

Hãy cẩn thận trong khi sử dụng, một số thư viện được sử dụng runtimeđược coi là không sử dụng!

Để biết thêm chi tiết tham khảo liên kết này


4
[cộng] 1 cho đề cập đến thời gian chạy!
gaurav

1
Bạn đúng một số phụ thuộc thời gian chạy được tuyên bố là không sử dụng nhưng thực tế là cần thiết.
thông minh

43

Như những người khác đã nói, bạn có thể sử dụng phần phụ thuộc: phân tích mục tiêu để tìm ra phần phụ thuộc nào được sử dụng và khai báo, sử dụng và không khai báo, hoặc không sử dụng và khai báo. Bạn cũng có thể thấy sự phụ thuộc: phân tích-dep-mgt hữu ích để tìm kiếm sự không phù hợp trong phần Quản lý phụ thuộc của bạn.

Bạn chỉ có thể xóa các phụ thuộc trực tiếp không mong muốn khỏi POM của mình, nhưng nếu chúng được giới thiệu bởi các lọ của bên thứ ba, bạn có thể sử dụng các <exclusions>thẻ trong phần phụ thuộc để loại trừ các lọ của bên thứ ba (xem phần có tiêu đề Loại trừ phụ thuộc để biết chi tiết và thảo luận) . Dưới đây là một ví dụ không bao gồm đăng nhập chung từ phụ thuộc 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) Tôi đã sử dụng plugin Jonnyzzz, như đã nhận xét cho câu hỏi. Plugin đẹp, hoạt động tốt với IntelliJ 2016.1.3
Ngày

34

Bạn đã xem Plugin phụ thuộc Maven chưa? Điều đó sẽ không xóa công cụ cho bạn nhưng có các công cụ cho phép bạn tự phân tích. Tôi đang nghĩ đặc biệt về

mvn dependency:tree

1
Tuyệt vời - cảm ơn (không thể tìm thấy những gì tôi đang tìm kiếm khi tôi tiếp tục tìm kiếm "phụ thuộc sạch" và nó đã đưa ra plugin sạch !! nhưng điều này có vẻ hứa hẹn .. phụ thuộc mvn: phân tích)

14

Tôi đã có loại vấn đề tương tự và quyết định viết một kịch bản loại bỏ sự phụ thuộc cho tôi. Sử dụng điều đó tôi đã nhận được hơn một nửa số phụ thuộc khá dễ dàng.

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


2
Lưu ý, tập lệnh này không sử dụng mvn dependency:analyze. Nó chỉ cố gắng loại bỏ mọi phụ thuộc và kiểm tra nếu mvn installhoạt động.
ăn kiêng
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.