我目前正在为服务器软件开发一个API,以便用户可以通过为其编写插件来扩展我的软件,而不是自己修改软件,并允许其他没有编程知识的用户通过添加这些插件来轻松更改软件。到目前为止,一切正常。但是,我遇到了配置问题。
你看,每个插件都有一个plugin.yml文件,存储着这4个属性: Main:这里存放的是主类 名称:这是存储插件名称的地方 版本:这是存储插件版本的地方 作者:这是存储插件作者的地方
现在,为了让插件向控制台打印一些内容,他们使用一个名为: this.getServer().getLogger().info("MESSAGE); 的函数(他们为插件扩展了另一个类,这就是为什么他们使用“this”而不是另一个类来记录)
但是,我不知道当他们调用该函数时如何获取哪个插件。我有一个 PluginSessions 的 ArrayList,事件处理程序使用它来循环运行事件函数。
我的解决方案是获取正在调用类的jar,这样我就可以从那里获取plugin.yml。但是,我不知道如何获得它,我尝试过使用 Class.forName();和一些其他代码。但由于该类在运行代码的 jar/project 中不存在,因此会抛出 ClassNotFoundException。
这里有人知道如何在不使用 Class.forName() 的情况下获取类所在的 jar 吗?谢谢! -特伦特
最佳答案
看一下Class.getResource
。
如果你调用 MyClass.getResource("plugin.yml") (或带有前导斜杠的“/plugin.yml”,我忘了),你会得到一个文件 URL,该 URL 指向与 MyClass 相同的 jar 中的 plugin.yml 文件。 (如果路径错误或 jar 不包含“plugin.yml”文件,则为 null
。)然后,您可以打开该资源的 InputStream。在插件框架中,您可能需要使用myPluginInstance.getClass().getResource
。
关于java - 如何获取jar类来自,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28386422/