2013-07-08 28 views
9

Tôi đang làm việc trên một dự án Java trong Eclipse, sử dụng Maven để xây dựng và quản lý các phụ thuộc. Dự án được trải rộng trên 5 dự án Eclipse, một trong số đó là POM cha mẹ. Tôi đang thực hiện triển khai máy chủ dựa trên máy chủ phức tạp hơn nhiều mà một nhóm khác đã triển khai. Vì vậy, tôi dựa vào công việc của mình ra khỏi các tệp có sẵn và các tệp POM đã tồn tại của chúng, và bây giờ có nhiều phụ thuộc không cần thiết trong các POM trên các dự án Eclipse này.Làm thế nào để (an toàn) loại bỏ các phụ thuộc Maven không cần thiết trong Eclipse?

Tương đối nói, tôi là một người mới bắt đầu Maven, nhưng tôi quen với lệnh này:

mvn dependency:analyze 

Khi tôi chạy lệnh này sử dụng plugin Eclipse Maven, tôi sẽ nhận được một danh sách dài các "chưa sử dụng tuyên bố phụ thuộc, "nhưng khi tôi cố gắng loại bỏ một vài trong số họ, chương trình của tôi sẽ bị gián đoạn, đôi khi theo những cách bí ẩn.

Có cách nào được chấp nhận, thực hành tốt nhất để giải quyết vấn đề này không? Hay tôi đã từ chức để loại bỏ những phụ thuộc này (có thể) không sử dụng từng người một, đảm bảo không có gì bị hỏng sau mỗi lần bị loại bỏ?

+0

làm eclipse làm nổi bật các lỗi mã do thiếu phụ thuộc nhanh chóng sau khi bạn xóa chúng? – vikingsteve

+0

Không, không có lỗi thời gian biên dịch sau khi xóa các phụ thuộc này. Đó là điều khó hiểu về tình huống này. –

+0

Bạn có thể có các phụ thuộc thời gian chạy không có nghĩa là biên dịch lỗi. Ví dụ, việc thực hiện ghi nhật ký được sử dụng trong thời gian chạy được cho một tệp cấu hình. – YMomb

Trả lời

1

Bạn có thể thử chạy mã của mình bằng tùy chọn java -verbose:class được bật. Điều này sẽ tạo ra đầu ra cho bạn thấy nơi mà (trong đó tập tin jar) mỗi lớp được nạp từ. (Lưu ý: trên Sun JRE này được ghi vào tiêu chuẩn ra, tôi nghĩ về IBM JRE cùng nó được ghi vào sai số chuẩn.) Dưới đây là một ví dụ về đầu ra:

[Loaded junit.framework.AssertionFailedError from file:/D:/Documents%20and%20Settings/mike/.m2/repository/junit/junit/3.8.2/junit-3.8.2.jar] 
[Loaded junit.framework.ComparisonFailure from file:/D:/Documents%20and%20Settings/mike/.m2/repository/junit/junit/3.8.2/junit-3.8.2.jar] 
[Loaded org.jmock.core.SelfDescribing from file:/D:/Documents%20and%20Settings/mike/.m2/repository/jmock/jmock/1.2.0/jmock-1.2.0.jar] 
[Loaded org.apache.log4j.spi.Configurator from file:/D:/Documents%20and%20Settings/mike/.m2/repository/log4j/log4j/1.2.9/log4j-1.2.9.jar] 
[Loaded org.apache.log4j.xml.DOMConfigurator from file:/D:/Documents%20and%20Settings/mike/.m2/repository/log4j/log4j/1.2.9/log4j-1.2.9.jar] 

Chừng nào bạn chạy qua hầu hết các logic của chương trình của bạn (để các lớp được yêu cầu được tải), bạn có thể giả định một cách an toàn rằng bất kỳ lọ nào không được đề cập trong tiết: lớp đầu ra, có thể được loại bỏ như là một phụ thuộc maven.

Bạn cũng có thể thực hiện tìm kiếm & thay thế trên chi tiết: đầu ra lớp, chuyển nó thành csv chẳng hạn, sau đó đưa nó vào chương trình bảng tính để sắp xếp/nhóm theo tệp jar.

Vẫn còn một chút công bằng của nỗ lực thủ công, nhưng ít nhất nó sẽ cung cấp cho bạn một nơi nào đó để bắt đầu!

+0

Âm thanh như giải pháp ít đau đớn nhất. Tôi sẽ thử, cảm ơn! –

0

Tôi không biết rằng thường có các phương pháp hay nhất được chấp nhận xung quanh vấn đề này, vì bất kỳ điều gì từ sự mẫn cảm đối với dịch vụ đều có thể bị hỏng khi chạy. Bài kiểm tra đơn vị có thể giúp bạn, nhưng nếu bạn không có bảo hiểm tốt, họ có thể cho bạn cảm giác an toàn sai lầm. Bạn vẫn sẽ phải kiểm tra với các bài kiểm tra chức năng (hy vọng tự động) sau khi bạn gỡ bỏ mọi gói.

Các vấn đề liên quan