Java, загрузка классов из JAR, чтобы использовать их позже - PullRequest
0 голосов
/ 19 мая 2018

У меня проблема с загрузкой класса из файла JAR.

Я могу загрузить их с помощью URLClassLoader, используя JarFile и т. Д. как в этом ответе ;но если позже в коде я пытаюсь создать их экземпляр с отражением:

Object obj = Class.forName(className).newInstance()

я получаю ClassNotFoundException.Могу ли я динамически загрузить класс, чтобы использовать их позже, когда они мне понадобятся, точно так же, как классы в ClassPath?Спасибо!

1 Ответ

0 голосов
/ 25 июня 2018

Вам необходимо предоставить загрузчик классов для метода Class.forName - иначе он будет выглядеть в том же загрузчике классов, что и ваш класс.
Object obj = Class.forName("name", true, loader).newInstance().

Но вы не можете просто загрузить класс, а затем использовать его в своем коде, как MyLoadedType - поскольку здесь java не знает, где искать этот класс, если вы не убедитесь, что ваш код и загруженный коднаходится в том же загрузчике классов - вы можете сделать это, запустив весь код из загрузчика пользовательских классов, который позволяет добавлять новые источники во время выполнения.(URLClassLoader допускает это, но метод защищен - поэтому вам нужно расширить его и сделать его общедоступным, в java 8 системный загрузчик классов также URLClassLoader - но это было изменено в java 9).

Но вы можете работать с этим кодом, используя отражения, как я вам показал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...