NoClassDefFoundError с отражением Java - PullRequest
1 голос
/ 15 мая 2011

Я использую следующий код для динамической загрузки класса в Java:

URL url = new File(ACTIONS_PATH).toURI().toURL();
URLClassLoader clazzLoader = new URLClassLoader(new URL[]{url});
Class<RatingAction> clazz =  (Class<RatingAction>) clazzLoader.loadClass(name);
return clazz.newInstance(); 

Этот код работает с простыми классами (без наследования или интерфейсов), но класс, который я хочу загрузить, реализует интерфейс (который загрузчик классов может найти с помощью findClass) и когда я вызываю class.newInstance, я получаю упомянутое исключение. Что я делаю не так?

Спасибо.

1 Ответ

2 голосов
/ 15 мая 2011

У вас проблемы с вашим classpath.Полагаю, это происходит, поскольку вы не определяете родительский загрузчик классов - содержит ли «url» все необходимые классы, включая системные классы?

Вы получаете исключение, когда класс фактически разрешен, поэтому классыкоторые появляются в загруженном классе, также загружаются.Если вы измените clazzLoader.loadClass(name) на clazzLoader.loadClass(name, true), вы получите исключение в строке loadClass.

Попробуйте выполнить следующее:

URL url = new File(ACTIONS_PATH).toURI().toURL();
URLClassLoader clazzLoader = new URLClassLoader(new URL[]{url}, getClass().getClassLoader());
Class<RatingAction> clazz =  (Class<RatingAction>) clazzLoader.loadClass(name);
return clazz.newInstance(); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...