Suy nghĩ đầu tiên của tôi là bạn có thể làm điều này bằng cách sử dụng một bộ nạp lớp để lặp qua tất cả các tệp lớp trong jar và sử dụng sự phản chiếu để phân tích từng tệp cho sự phụ thuộc của chúng. Tuy nhiên, lớp Class không có phương thức nào cho bạn biết thông tin này. Vì vậy, suy nghĩ tiếp theo sẽ là sử dụng một số loại phân tích bytecode (ví dụ: asm) để rút ra tất cả các lớp được tham chiếu từ một lớp biên dịch.
Giả sử rằng bạn có thể nhận được thông tin này, vấn đề tiếp theo sẽ là để theo dõi các lớp trong lọ.Trong một nghĩa nào đó, đây sẽ là phần dễ dàng bởi vì tất cả những gì bạn cần làm là tạo một trình nạp lớp cho mỗi jar trong repo maven của bạn, hoặc thư mục hoặc bất cứ nơi nào các lọ, và sau đó hỏi từng cái một nếu nó chứa lớp cụ thể.
Lỗ hổng trong suy nghĩ đó là một lớp java (nguồn thô hoặc được biên dịch) không chi tiết nơi để có được lớp được nhập từ đó. Vì vậy, nếu bạn có hai lớp học với cùng một gói và tên (xảy ra thường xuyên hơn bạn có thể nghĩ), sau đó bạn sẽ không thể nói được sử dụng.
Ngay cả java chỉ giả định rằng đầu tiên nó tìm thấy trong đường dẫn lớp là đúng và ném một ngoại lệ nếu nó hóa ra là không chính xác (MethodNotFoundException). Vì vậy, trừ khi bạn sẽ phân tích sâu hơn bytecode để tìm ra phương thức nào trên mỗi lớp được gọi và sau đó so sánh những phương thức với các lớp trong đường dẫn lớp của bạn, bạn vẫn sẽ không thể đúng.
Tóm lại, có thể bạn sẽ làm những gì bạn muốn, nhưng có thể sẽ rất khó khăn và mất thời gian.
Con đường tôi thường đối phó với điều này chỉ đơn giản là cháy lên lớp trong mã thử nghiệm và tiếp tục bổ sung phụ thuộc cho đến khi tôi có thể lấy nó để thực hiện tất cả các phương pháp Tôi quan tâm đến.
Không phải Maven cho mục đích chính xác này? – BalusC
Hãy tưởng tượng rằng bạn có một dự án dựa trên Ant và bạn muốn triển khai nó vào kho lưu trữ maven cho người khác để sử dụng nó như là một sự phụ thuộc. Bạn phải xác định phụ thuộc transitive của nó trong định nghĩa pom. Tôi cần một cách để dễ dàng tìm kiếm chúng – lisak
Chỉnh sửa: Tôi biết cách thực hiện thủ công, tốn nhiều công sức. Độ phân giải phụ thuộc tự động nên về lý thuyết có thể, tất cả thông tin có trong .jar và trong kho lưu trữ Maven rồi. –