本帖最后由 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里.
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里.
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