Я пытаюсь загрузить класс динамически, используя метод loadClass для java ClassLoader в среде IDE NetBeans. Когда я запускаю следующую автономную программу она будет выполнена правильно и печатает вывод, как ожидалось:ClassNotFoundException - при динамическом загрузке класса в веб-приложении с использованием ClassLoader
public class StandaloneClass {
public static void main(String[] args) {
try {
String directory = "C:\\Workspace\\ProjectMeteor\\src\\java\\com\\meteor\\loader";
File file = new File(directory);
URL url = file.toURI().toURL();
URL[] urls = new URL[]{url};
ClassLoader cl = new URLClassLoader(urls);
Class cls = cl.loadClass("com.meteor.loader.ClassToBeLoaded");
Object o = cls.newInstance();
System.out.println("Class Loaded: " + o.getClass().toString());
} catch (Exception e) {
e.printStackTrace();
}
}
}
Выход: - Класс Loaded: класс com.meteor.loader.ClassToBeLoaded
Но когда я запустите тот же кусок кода (в веб-приложении) его бросание ClassNotFoundException.
@Path("/test")
public class DynamicWebClass {
@GET
@Path("/getFileExplorerNodes")
@Produces(MediaType.TEXT_PLAIN)
public String getFileExplorerNodes() {
try {
String directory = "C:\\Workspace\\ProjectMeteor\\src\\java\\com\\meteor\\loader";
File file = new File(directory);
URL url = file.toURI().toURL();
URL[] urls = new URL[]{url};
ClassLoader cl = new URLClassLoader(urls);
Class cls = cl.loadClass("com.meteor.loader.ClassToBeLoaded");
Object o = cls.newInstance();
return o.getClass().toString();
} catch (Exception e) {
e.printStackTrace();
return "error";
}
}
}
Выход: -
java.lang.ClassNotFoundException: com.meteor.loader.ClassToBeLoaded
Почему это бросает исключение в веб-приложения, когда он работает нормально в отдельную программу? Как устранить эту проблему и запустить ее правильно в веб-приложении?
Не могли бы вы проверить, что класс упакован в войну – dasrohith
Да. Класс есть на войне. И война присутствует в папке dist проекта. –
Но вы указываете на другой каталог в C: /. Укажите относительный URL-адрес – dasrohith