Сlassloader загружает не из указанной папки

373
11 мая 2017, 10:59

есть код

    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 

Т.е. адрес вроде меняется, но в любом случае вызывается только метод по первому адресу. Помогите разобраться, чет я очень запутался(

READ ALSO
Java + Selenide. Не проходит элементарный тест

Java + Selenide. Не проходит элементарный тест

Впервые работаю с Java и Intelij idea, да и собственно с Селенидом тожеПрежде использовал с# со студией и побывал Селениум

371
Добавление файла в архив с помощью метода putNextEntry()

Добавление файла в архив с помощью метода putNextEntry()

Объясните пожалуйста, как происходит добавление объекта ZipEntry в архив с помощью метода putNextEntry() класса ZipOutputStream, так как я новичок не получается...

308
запуск web проекта на java выдает ошибку

запуск web проекта на java выдает ошибку

При запуске web проекта на java выдает ошибку

292
Исключение SSLHandshakeException

Исключение SSLHandshakeException

Вот такой код

326