Есть несколько постов о том, как добавить jar-файл в classpath во время выполнения с помощью следующей идеи:
- получить текущий путь к классу системы;
- предположим, что это URLClassLoader;
- использовать отражение для установки доступа к защищенному методу addURL;
- используйте указанный метод для добавления URL-адреса в classpath.
Вот пример:
Добавление файлов в путь к классам Java во время выполнения
Из-за 2 и 3 шагов это выглядит как "мерзкий взлом".
Как я могу расширить URLClassLoader и установить его как текущий? Я немного запутался с загрузчиками классов и попробовал следующее:
public static void main(String... args) {
URLClassLoader loader = new URLClassLoader(new URL[]{new URL("file:jxl.jar")});
System.out.println(loader.loadClass("jxl.Workbook"));
Thread.currentThread().setContextClassLoader(loader);
System.out.println(Class.forName("jxl.Workbook"));
} // main
В четвертой строке я получаю ClassNotFoundException, а вторая работает нормально. (почему это так, кстати?)