Как исправить 'ClassNotFoundError' при загрузке классов из папки вне пути к классам - PullRequest
0 голосов
/ 12 апреля 2019

Я пишу модульную систему, которая загружает модули с дополнительными функциями в мой плагин Spigot.Когда я пытаюсь загрузить класс динамически из моих модулей, я получаю ClassNotFoundException.

Я использую загрузчик классов для загрузки файла jar моих модулей, которые хранятся в отдельной папке, также называемой «модулями».Я искал несколько уроков, касающихся загрузчиков классов, и, насколько мне известно, я не делаю ничего плохого в этом кусочке кода.

Вот мой код:

        File modulesFolder = new File(instance.getDataFolder(), "modules/");
        if (!modulesFolder.exists())
            modulesFolder.mkdirs();

        System.out.println("scanning modules folder...");
        for (File f:modulesFolder.listFiles()) {
            if (f.isFile() && f.getName().endsWith(".jar")) {
                String moduleName = LCStringUtils.trimString(f.getName(), ".jar");
                Class<?> moduleClass = null;
                try {
                    ClassLoader loader = URLClassLoader.newInstance(
                            new URL[] {f.toURI().toURL()},
                            getClass().getClassLoader()
                        );

                    moduleClass = Class.forName("net.libercraft." + moduleName.toLowerCase() + "." + moduleName, true, loader);
                } catch (ClassNotFoundException | MalformedURLException e) {
                    e.printStackTrace();
                }
                if (moduleClass == null || !Module.class.isAssignableFrom(moduleClass))
                    continue;
                System.out.println(moduleClass.getName());
            }
        }

Я совершенно уверен, что класс должен быть там.Код способен загружать имя файла, которое ему нужно для получения classpath.И как вы можете видеть в файловой структуре для LiberEffects.jar, он также содержит класс LiberEffects.Я поместил этот jar-файл в папку модулей, но когда он пытается загрузить класс net.libercraft.libereffects.LiberEffects, он выдает ошибку.

Структура файла: https://i.imgur.com/EvHBt10.png

1 Ответ

0 голосов
/ 13 апреля 2019

¿Вы пытались указать полный путь к каталогу вместо "modules/"? Например C:\Users\userName\Documents\NetBeansProjects\Erste_projeckt\modules.

...