Moją pierwszą myślą było to, że można to zrobić za pomocą programu ładującego klasy iteracyjne nad wszystkie pliki klas w słoiku i użyj refleksji, aby przeanalizować każdy z nich pod kątem zależności. Jednak klasa Class nie ma metody, która przekazuje ci tę informację. Tak więc następną myślą byłoby użycie jakiegoś analizatora bajtów (na przykład), aby wyciągnąć wszystkie przywoływane klasy z klasy kompilacji.
Zakładając, że możesz zdobyć te informacje, następnym problemem będzie powrót do śledzenia klas do słoików.W pewnym sensie byłaby to łatwa część, ponieważ wszystko, co musisz zrobić, to stworzyć moduł ładujący klasy dla każdego słoika w swoim maven repo, katalogu lub gdziekolwiek są słoiki, a następnie zapytać każdego z nich, czy zawierał on określoną klasę.
Wadą tego myślenia jest to, że klasa java (surowe źródło lub skompilowana) nie określa, skąd pobrać importowaną klasę. Więc jeśli masz dwie klasy o tym samym pakiecie i nazwie (dzieje się to częściej niż myślisz), to nie będziesz w stanie stwierdzić, którego użyć.
Nawet java zakłada, że pierwszy znaleziony w ścieżce klasy jest prawidłowy i zgłasza wyjątek, jeśli okaże się niepoprawny (MethodNotFoundException). Więc jeśli nie zamierzasz dalej analizować kodu bajtowego, aby dowiedzieć się, jakie metody na poszczególnych klasach są wywoływane, a następnie porównać je z klasami w ścieżce klasy, nadal nie będziesz w stanie być poprawny.
Krótko mówiąc, prawdopodobnie można robić, co się chce, ale może być bardzo trudne i czasochłonne.
Sposób, w jaki normalnie radzić sobie z tym jest po prostu odpalić klasy w kodzie testowym i dodajemy zależności dopóki mogę je wykonać każdą metodę jestem zainteresowany.
Czy Maven nie jest przeznaczony właśnie w tym celu? – BalusC
Wyobraź sobie, że masz projekt oparty na Ant i chcesz go wdrożyć w repozytorium maven, aby ktoś inny użył go jako zależności. Musisz określić jego przejściowe zależności w definicji pom. Potrzebuję sposobu, który ułatwiłby ich znalezienie. – lisak
Edycja: wiem, jak to zrobić ręcznie, spędzając wiele wysiłku. Automatyczne rozpoznanie zależności powinno być teoretycznie możliwe, wszystkie informacje znajdują się już w .jar iw repozytorium Maven. –