Trong ứng dụng của chúng tôi thông qua quá trình phát triển nhiều tệp JAR đã được thu thập. Làm thế nào tôi có thể lọc ra những cái mà không được ứng dụng sử dụng nữa? Trên một số cách dễ dàng?Làm cách nào để tìm hiểu ứng dụng JAR nào không sử dụng?
Trả lời
Nếu bạn chắc chắn bạn có thể thực hiện ứng dụng của mình để nó sử dụng tất cả các lọ, bạn có thể tạo một đơn giản kịch bản perl:
while (<>) {
$l{$1}++ if m/\s+from\s+(.+\.jar)/;
}
for $l (keys(%l)) {
print "$l\n";
}
(cho phép đặt tên là list_jars.pl) và thức ăn nó đầu ra của một hoạt động chi tiết:
java -verbose -jar YOUR_APP.jar | perl list_jars.pl
mà nên liệt kê tất cả các nguồn của các tầng lớp nạp.
bây giờ là một mẹo thực sự gọn gàng – radai
Nếu tôi có lưu trữ ứng dụng web (chiến tranh) thì sao? – Trick
Kịch bản perl phân tích cú pháp đầu ra của trình nạp lớp tiết ra, đối với một ứng dụng web, bạn có thể thêm -verbose vào các tham số khởi động và phân tích cú pháp kết quả đầu ra tiêu chuẩn kết quả. (Điều này có thể sẽ hiển thị lọ được sử dụng bởi các thùng chứa servlet quá.) – rsp
Viết tập lệnh xóa từng tập lệnh một khỏi đường dẫn xây dựng của bạn, biên soạn dự án và kiểm tra lỗi xây dựng. Kịch bản sẽ lắp ráp một danh sách các lọ không sử dụng. Nên dễ viết trong bash/python.
Giải pháp này không thể theo dõi phụ thuộc thời gian chạy dựa trên phản ánh (xem nhận xét của tôi bên dưới).
Điều đó sẽ tìm ra các lỗi biên dịch thời gian, nhưng không phải là lỗi dẫn đến thời gian chạy thất bại của tải lớp bị trì hoãn. Đặc biệt với các khuôn khổ phức tạp, những thứ như vậy khá phổ biến. Thậm chí tệ hơn là khi khung công tác chọn một lớp có sẵn cho một giao diện cụ thể và hành vi này khác nhau tùy thuộc vào việc triển khai thực sự được sử dụng. Tôi khuyên bạn nên chạy thử nghiệm tích hợp đầy đủ sau khi bạn nghĩ mình đã hoàn tất. –
Bạn nói đúng, giải pháp này không xử lý trường hợp đó. Nhưng tôi nghĩ rằng nó là khá không thể làm điều đó tự động nếu bạn sử dụng một số phản ánh tiên tiến. Bạn sẽ làm gì, trích xuất tất cả các chuỗi trong mã có thể khớp với tên lớp:>? – pajton
Bạn cũng có thể thực hiện điều này thông qua IDE Eclipse bằng cách loại bỏ các mục từ một .classpath cùng một lúc và xây dựng lại dự án. Khi công cụ chuyển sang màu đỏ, bạn đã xóa một thứ đang được sử dụng. ;-) –
nếu bạn đang sử dụng maven, có một mojo cho rằng: mvn dependency: phân tích nếu không, tôi không biết bất kỳ cách nào dễ dàng. cách cứng sẽ liên quan đến phân tích bytecode của tất cả các lớp được biên dịch của dự án của bạn để kiểm tra nhập khẩu ...
và suy nghĩ về nó, ngay cả khi không phản chiếu ... – radai
Không ... Nhưng maven sẽ bắt phụ thuộc khai báo trong tệp pom.xml nhưng không rõ ràng trong mã (khung và trình điều khiển nạp động chẳng hạn.) –
Có lẽ bạn có thể viết ClassLoader của riêng bạn, kế thừa từ java.lang.ClassLoader, ghi nhật ký của các lớp được nạp? Điều đó vẫn không giải quyết được vấn đề bảo đảm đầy đủ tất cả các lớp được tải trong tất cả các đường dẫn mã có thể, mặc dù
Tôi đã sử dụng stan. đó là một bộ phân tích cấu trúc cho java, và nó cho tôi kết quả rất tốt.
Bạn có thể trực quan xem lọ nào được sử dụng và loại bình nào không được sử dụng.
- 1. Làm cách nào để tìm hiểu cách sử dụng không gian PermGen của tôi?
- 2. Tôi làm cách nào để tìm hiểu cách sử dụng bộ sưu tập commons Java?
- 3. Làm cách nào để tìm các phương thức không sử dụng trong ứng dụng Ruby?
- 4. Làm cách nào để tìm hiểu vị trí tập trung trong ứng dụng WPF của tôi?
- 5. Làm cách nào để tìm hiểu thêm về sự kiện Ứng dụng Hang?
- 6. Làm cách nào để sử dụng ProGuard?
- 7. Làm thế nào để tìm hiểu SOAP?
- 8. Tìm hiểu trình biên dịch Maven nào sử dụng
- 9. Cách tìm hiểu các ứng dụng thiết kế trong Java
- 10. Làm cách nào để sử dụng Tệp :: Tìm trong Perl?
- 11. Làm cách nào để thêm jar ngoài vào ứng dụng nhật thực rcp?
- 12. Tôi nên sử dụng loại jar nào để sử dụng gói javax.persistence trong ứng dụng dựa trên ngủ đông?
- 13. IRequiresSessionState - làm cách nào để sử dụng?
- 14. Làm cách nào để tìm hiểu xem mã javascript nhất định có thực sự được sử dụng không?
- 15. Tôi làm cách nào để kiểm tra tệp jar đã ký bằng cách sử dụng Ant?
- 16. Làm cách nào để kiểm tra cách khách hàng sử dụng ứng dụng Cocoa của tôi?
- 17. làm thế nào tôi có thể tìm thấy css không sử dụng trong ứng dụng ajax?
- 18. Làm cách nào để tìm hiểu các yêu cầu phần cứng mà ứng dụng Android của tôi có?
- 19. Debian: Tìm hiểu cách sử dụng CPU bằng cách sử dụng bash
- 20. Java - Làm cách nào để sử dụng tệp lớp?
- 21. Làm thế nào để tái sử dụng một ứng dụng tái sử dụng trong Django
- 22. Làm cách nào để sử dụng không gian tên xml với tìm/tìm thấy trong lxml?
- 23. Nếu ứng dụng facebook của tôi bị định cấu hình sai, làm cách nào để tìm hiểu thêm?
- 24. Làm cách nào để biết phiên bản ứng dụng đường ray nào đang sử dụng
- 25. Làm cách nào để tìm hiểu thuật toán của Tarjan?
- 26. Làm cách nào để tìm hiểu về mã nguồn GNU?
- 27. Làm cách nào để đặt classpath mà rmiregistry sử dụng?
- 28. Làm cách nào để chuyển một tệp làm đối số cho ứng dụng Java của tôi được tạo bằng cách sử dụng Trình chặn JAR?
- 29. Làm cách nào để tìm hiểu Java5 hoặc Java6?
- 30. Cách tìm hiểu thuật toán crypt() nào sử dụng trên máy của bạn?
Câu hỏi hay. Tôi cũng muốn biết điều này :) – Alfred
Tôi nghĩ rằng đây là một trong những lỗ hổng lớn nhất của java, thực tế là các phụ thuộc động không thể đinh xuống 100% – karoberts