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