есть код
public String createMethodHelper() throws CannotCompileException, InstantiationException, NotFoundException, IllegalAccessException, NoSuchMethodException, InvocationTargetException, ClassNotFoundException {
// System.setProperty("user.dir", "C:\\Java\\IdeaProjects\\testScandJavaCafee\\src\\main\\java\\ru");
String dir2=null;
File jarFile = new File(".");
if (jarFile.exists()) {
dir2 = jarFile.getAbsolutePath();
}
System.out.println(dir2);
ClassLoader loader= new DynamicClassOverloader(new String[] {"."});
Class clazz= Class.forName("ru.testScandJavaCafee.controller.Helper2",true,loader);
if (jarFile.exists()) {
dir2 = jarFile.getAbsolutePath();
}
System.out.println(dir2);
Object newClassInstance1= clazz.newInstance();
Method method1 = newClassInstance1.getClass().getMethod("createList");
String dir=null;
if (jarFile.exists()) {
dir = jarFile.getAbsolutePath();
}
System.out.println(dir);
String sum = (String) method1.invoke(newClassInstance1);
System.out.println(sum);
return sum;
}
Вывод следующий
C:\Java\apache-tomcat-7.0.75\bin\.
C:\Java\apache-tomcat-7.0.75\bin\.
C:\Java\apache-tomcat-7.0.75\bin\.
200
200 - возвращает метод createList. Всё на этом этапе работает. Загружается класс по адресу
C:\Java\apache-tomcat-7.0.75\bin\ru\testScandJavaCafee\controller\Helper2
Но я хочу вызвать другой метод из другой директории. Метод Helper из
C:\Java\IdeaProjects\testScandJavaCafee\src\main\java\ru\testScandJavaCafee\controller\
Для этого раскомментирую закомментированную строку и меняю строку с указание класса:
System.setProperty("user.dir", "C:\\Java\\IdeaProjects\\testScandJavaCafee\\src\\main\\java\\ru\\testScandJavaCafee\\controller");
Class clazz= Class.forName("Helper",true,loader);
но получаю ошибку, что такой класс не найден! Но, что очень странно на мой взгляд, если оставить строку с именем класса как сразу, то загрузится первоначальный класс, хотя путь совсем другой уже. Т.е. если раскомментировать и оставить строку:
Class clazz= Class.forName("ru.testScandJavaCafee.controller.Helper2",true,loader);
Получаю вывод
C:\Java\IdeaProjects\testScandJavaCafee\src\main\java\ru\testScandJavaCafee\controller\.
C:\Java\IdeaProjects\testScandJavaCafee\src\main\java\ru\testScandJavaCafee\controller\.
C:\Java\IdeaProjects\testScandJavaCafee\src\main\java\ru\testScandJavaCafee\controller\.
200
Т.е. адрес вроде меняется, но в любом случае вызывается только метод по первому адресу. Помогите разобраться, чет я очень запутался(
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники