插件系统中的java.lang.NoClassDefFoundError

问题描述 投票:0回答:1

所以,我有一个程序,我想使用插件或模块进行扩展。

我从文件夹中加载它们,并获得一个ClassLoader来遍历所有文件,以查看它们是否具有我的软件的Super类

然后我得到此异常:

 java.lang.NoClassDefFoundError: me/mnjg123/privacy1/de/privacy2/system/core/objects/Feature
        at java.lang.ClassLoader.defineClass1(Native Method) ~[?:1.8.0_242]
        at java.lang.ClassLoader.defineClass(ClassLoader.java:757) ~[?:1.8.0_242]
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) ~[?:1.8.0_242]
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:468) ~[?:1.8.0_242]
        at java.net.URLClassLoader.access$100(URLClassLoader.java:74) ~[?:1.8.0_242]
        at java.net.URLClassLoader$1.run(URLClassLoader.java:369) ~[?:1.8.0_242]
        at java.net.URLClassLoader$1.run(URLClassLoader.java:363) ~[?:1.8.0_242]
        at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_242]
        at java.net.URLClassLoader.findClass(URLClassLoader.java:362) ~[?:1.8.0_242]
        at java.lang.ClassLoader.loadClass(ClassLoader.java:419) ~[?:1.8.0_242]
        at java.lang.ClassLoader.loadClass(ClassLoader.java:352) ~[?:1.8.0_242]
        at me.mnjg123.ragemade.de.bungee.system.core.handlers.FeatureHandler.loadFeatures(FeatureHandler.java:88) ~[?:?]
        at me.mnjg123.privacy1.de.privacy2.system.core.privacy3.addFeature(privacy3.java:40) ~[?:?]
        at me.mnjg123.privacy1.de.privacy2.system.core.privacy3.onEnable(privacy3.java:33) ~[?:?]
Caused by: java.lang.ClassNotFoundException: me.mnjg123.privacy1.de.privacy2.system.core.objects.Feature
        at java.net.URLClassLoader.findClass(URLClassLoader.java:382) ~[?:1.8.0_242]
        at java.lang.ClassLoader.loadClass(ClassLoader.java:419) ~[?:1.8.0_242]
        at java.lang.ClassLoader.loadClass(ClassLoader.java:352) ~[?:1.8.0_242]

这是我的ClassLoader:

public List<Feature> loadFeatures() throws FeatureExeption {

            List<Feature> features = new ArrayList<>();

            try {

                String path = new File("").getAbsolutePath();
                File folder = new File(path + "/plugins/privacy3/addons/");
                if(!folder.exists())
                    folder.mkdirs();
                  File[] files = folder.listFiles();
                  if (files != null) {
                    for (File plugin : files) {
                      ZipInputStream zip = new ZipInputStream(new FileInputStream(plugin));
                      List<String> classes = new ArrayList<>();

                      for(ZipEntry entry = zip.getNextEntry(); entry != null; entry = zip.getNextEntry()) {
                          if(!entry.isDirectory() && entry.getName().endsWith(".class")) {
                              String className = entry.getName().replace("/", ".");

                              classes.add(className.substring(0, className.length() - ".class".length()));
                          }
                      }

                      URLClassLoader classloader = new URLClassLoader(new URL[]{plugin.toURI().toURL()});


                      for(String className : classes) {


                    line 88 ->    Class<?> cl = classloader.loadClass(className);

                      }

                     zip.close();
                     classloader.close();
                    }
                  }

            } catch (IOException | ClassNotFoundException  e) {

                e.printStackTrace();
            }

            return features;

        }

这是我要加载的类

package me.mnjg123.featuretest;

import me.mnjg123.privacy1.de.privacy2.system.core.objects.Feature;

/**
 * @author mnjg123
 *
 */
public class PayLoad extends Feature {




    /**
     * @param name
     */
    public PayLoad() {

        super("test", false);

    }

    @Override
    public void onEnable() {
        System.out.println("true");

        super.onEnable();
    }



}

我做错了什么?我该如何改善呢?

java exception plugins classloader noclassdeffounderror
1个回答
0
投票

通常来说,NoClassDefFoundError指的是在构建时缺少某些组件,这导致在使用时引发NoClassDefFoundError。

显然,在此路径下找不到文件:我/ mnjg123 / privacy1 / de / privacy2 / system / core / objects /功能

解决方案是重建一次

希望对您有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.