Недавно я столкнулся со сценарием, в котором у нас будет пустой jar-файл манифеста (т. Е. Jar с просто META-INF / MANIFEST.MF с атрибутом Class-Path), ссылающийся на другой файл jar где-нибудь в файловой системе. Я полагаю, что этот jar-файл манифеста был создан, чтобы действовать как мягкая ссылка на указанный jar-файл версии c, чтобы потребителю не приходилось иметь дело с незначительными изменениями версий реализации jar-файла.
manifest.jar:-
----META-INF/
--------MANIFEST.MF
Actual version specific implementation jar (test-1.1.jar):-
----META-INF/
--------MANIFEST.MF
----test/
--------Test1.class
Включая manifest.jar в classpath в приложении не загружает фактическую реализацию jar и, следовательно, я вижу ClassNotFoundException. Любая идея, почему он не загружается и как я могу загрузить эту банку, как ожидалось?
Обновление :
Я пробовал это с образцом исполняемого файла jar и его (sun.mis c .Launcher $ AppClassLoader), кажется, загружает класс, как и ожидалось. Ссылка просто на manifest.jar в Class-Path, в свою очередь, включает в себя фактическую реализацию jar.
Кроме того, я обнаружил, что у нас есть устаревший загрузчик пользовательских классов для проекта, не уверенный, вызывает ли это странное поведение.
По умолчанию, разве не следует позаботиться о ссылках на другие jar-файлы из manifest.jar?
Есть ли способ проверить, действительно ли этот пользовательский загрузчик классов ссылается на jar-файлы, упомянутые в Class-Path?