пятница, 27 июля 2012 г.

Загрузка JAR из другого JAR. Часть 2

Приветствую!

Как и обещал - вторая часть рассказа про загрузку jar, находящихся внутри другого jar.
Сегодня мы рассмотрим случай, когда у нас есть статически прилинкованный jar, внутри которого если несколько других библиотек, и нам нужно загрузить их все.

Здесь ключевым моментом является получения URL на "внешний" jar. Проще всего это сделать из класса, находящегося в этой библиотеке. Для этого вызываем (предполагаем, что класс называется ThisClass):
ThisClass.class.getProtectionDomain().getCodeSource().getLocation();

А далее по URL получаем путь к файлу (а это, напомню, настоящий файл на файловой системе) через вызов метода getPath().
После чего нам ничто не мешает создать File по пути и JarFile по файлу.

Далее все совсем просто - бегаем по JarEntry нашего "внешнего" jar-файла и если находим в нем вложенный jar-файл, то загружаем его как было описано в первой части статьи - выгрузка во временный файл и передача URLClassLoader URL этого файла.
Надо только не забыть правильно сформировать имя для временного файла, т.е. сделать что-то типа jarEntry.getName().replace('/''_').

Комментариев нет:

Отправить комментарий