Я пишу модульную систему, которая загружает модули с дополнительными функциями в мой плагин 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