Java加载插件jar ClassNotFoundException

标签 java plugins jar load classnotfoundexception

我是新来的,很抱歉我的英语不好;)。

我尝试使用以下代码在 java 中加载插件 jar:

package testprogramm;

import java.io.File;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.HashSet;
import java.util.Set;

public class TestProgramm {
    private static Set<Plugin> plugins = new HashSet<Plugin>();
    private static TestProgramm instance = new TestProgramm();

    public static void main(String[] args) {
        System.out.println("TestProgramm v0.1");

        File pluginsDirectory = new File("plugins");

        if (pluginsDirectory.exists() && pluginsDirectory.isDirectory()) {
            for (File pluginFile : pluginsDirectory.listFiles()) {
                if (pluginFile.exists() && pluginFile.isFile() && pluginFile.getName().endsWith(".jar")) {
                    try {
                        URL[] urls = new URL[] {pluginFile.toURI().toURL()};
                        ClassLoader loader = new URLClassLoader(urls);
                        Class c = loader.loadClass("src." + pluginFile.getName().toLowerCase().replace(".jar", "") + ".Main");
                        Object pluginObject = c.newInstance();

                        if (pluginObject instanceof Plugin) {
                            Plugin plugin = (Plugin) pluginObject;
                            plugins.add(plugin);
                            plugin.init(instance);
                            plugin.onEnable();
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
        }

        while (true) {
            if (true) { //code
                break;
            }
        }

        for (Plugin plugin : plugins) {
            plugin.onDisable();
        }
    }

    public int getInt() {
        return 5;
    }
}

插件类:

package testprogramm;

public abstract class Plugin {
    protected TestProgramm testProgramm;

    protected void init(TestProgramm testProgramm) {
        this.testProgramm = testProgramm;
    }

    public TestProgramm getTestProgramm() {
        return testProgramm;
    }

    public abstract void onEnable();
    public abstract void onDisable();
    public abstract void onEvent1(String eventInfo);
    public abstract void onEvent2(String eventInfo);
    public abstract void onEvent3(String eventInfo);
}

插件 jar 中的类:

package ownplugin;

import testprogramm.Plugin;

public class Main extends Plugin {
    @Override
    public void onEnable() {
        System.out.println("OwnPlugin enabled");
    }

    @Override
    public void onDisable() {
        System.out.println("OwnPlugin disabled");
    }

    @Override
    public void onEvent1(String arg0) {

    }

    @Override
    public void onEvent2(String arg0) {

    }

    @Override
    public void onEvent3(String arg0) {

    }
}

我得到这个ClassNotFoundException:

java.lang.ClassNotFoundException: src.ownplugin.Main
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at testprogramm.TestProgramm.main(TestProgramm.java:26)

我能做什么?怎么了。请帮助我。

最佳答案

您似乎正在尝试使用名为src.ownplugin.Main的类。但是,您的 Main 类实际上称为 ownplugin.Main。尝试替换这个

Class c = loader.loadClass("src." + pluginFile.getName().toLowerCase().replace(".jar", "") + ".Main");

有了这个

Class c = loader.loadClass(pluginFile.getName().toLowerCase().replace(".jar", "") + ".Main");

关于Java加载插件jar ClassNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24986376/

相关文章:

grails - 从插件_install.groovy脚本中获取Grails版本

c++ - 广泛应用(使用插件)

maven - 从 Oracle JDK 迁移到 OpenJDK

java - 类路径条目 my.jar 未指向类路径引用的有效 jar

unit-testing - 单元测试 StreamingOutput 作为 Responseentity Jersey

scala - 如何在多个项目之间共享 sbt 插件配置?

java - VS Code 无法解析 Springframework Data Redis 相关依赖项,但是,项目在 Eclipse 中构建得完全正常

java - 如何从java上的json列表中获取选定的值

java - 使用 RESTFul Web 服务实现 POST 方法以将数据插入 MYSQL 数据库

java - 我可以使用 Writer 类生成 xlsx 文件吗?