white_cola
本帖最后由 white_cola 于 2020-9-21 20:38 编辑

        Enumeration<URL> dirs = null;
        try {
            dirs = Thread.currentThread().getContextClassLoader().getResources("top/white_cola/commands");            
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println(dirs.hasMoreElements());


这代码在项目里的main方法中运行 输出true (同一个项目)


但是在插件中运行就是false,没有任何报错. (尝试了多线程 也不行)





有什么办法能在作为bukkit插件运行时,获取到吗?
想做一个自动寻找指定包里的所有类,然后添加进一个List里.


William_Shi

Bukkit插件统一采用自己的ClassLoader去加载的,这个ClassLoader在org.bukkit.plugin.java包下,通过查看其具体实现可知,这个PluginClassLoader与服务端主线程AppClassLoader之间没有实现双亲委派


第一,对于资源可以
https://bukkit.windit.net/javado ... e-java.lang.String-
第二,对于类加载器可以
https://bukkit.windit.net/javado ... ml#getClassLoader--


至于“指定包里所有类”,我推荐先获取ProtectionDomain,然后获取CodeSource,取到Jar文件
然后通过nio的walk也好,遍历JarEntry也好,总之去自己扫描一下Jar

第一页 上一页 下一页 最后一页