Это очень необычная ситуация, может быть, гораздо лучший подход, который обычно используется, - это "утончать" банки, поэтому у вас не будет зависимых файлов в некоторой папке внутри "внешнего" файла, а вместо этого все пакеты из зависимых файлов.станут пакетами внешнего jar-файла, находящегося рядом с вашим собственным кодом, который, вероятно, в любом случае находится во внешнем jar-файле.
Maven имеет для этого плагин shade , и обычно это путь.
Одно заметное исключение - приложения с весенней загрузкой, упакованные в виде JAR-файлов, которые работают так же, как вы сказали (они помещают зависимые jar-файлы в библиотеку BOOT-INF/lib
, так что технически jar-файлы находятся внутри jar-файла).У них есть свои собственные причины для такой работы, которые выходят далеко за рамки этого вопроса, но суть в том, что им пришлось создать специальный загрузчик классов, который бы справился с этой ситуацией.Java из коробки может читать классы из файловой системы или из обычного jar, но в теории java-приложение может читать двоичный код из любого места (удаленная файловая система, база данных, Jar внутри Jar и т. Д.), Пока вы реализуете загрузчик классов, который может найтии загружайте ресурсы оттуда.
В общем, я бы рекомендовал не связываться с загрузчиками классов, которые являются довольно продвинутыми концепциями, если вы действительно не знаете, что делаете.Большинство программистов на Java не создают свои собственные загрузчики классов.