如何获得jar类来自

时间:2015-02-07 19:31:50

标签: java eclipse api plugins log4j2

我目前正在研究服务器软件的API,因此用户可以通过为其编写插件来扩展我的软件,而不是自己修改软件,并允许没有编程知识的其他用户通过添加这些插件轻松更改软件。到目前为止,一切正常。但是,我遇到了配置问题。

你看,每个插件都有一个存储有这4个属性的plugin.yml文件: Main:主要类存储在这里 名称:这是存储插件名称的位置 版本:这是存储插件版本的地方 作者:这是存储插件作者的地方

现在,为了让插件能够在控制台上打印一些内容,他们使用了一个名为:this.getServer()。getLogger()。info(“MESSAGE)”的函数;(它们为插件扩展了另一个类,这就是为什么它们使用“this”而不是另一个类来记录)

但是,我不知道如何在调用函数时获取哪个插件。我有一个PluginSessions的ArrayList,事件处理程序使用它来循环运行事件函数。

我的解决方案是获取调用类的jar,这样我就可以从那里获取plugin.yml。但是,我不知道如何获得它,我尝试使用Class.forName();和其他一些代码。但是因为类在运行代码的jar /项目中不存在,所以会抛出ClassNotFoundException。

有没有人知道如何在不使用Class.forName()的情况下获取类来自的jar?谢谢! -Trent

2 个答案:

答案 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,那么您可以尝试以下技巧 -

  1. 双击选择/突出显示 PluginSessions
  2. 现在按 CTRL + SHIFT + T
  3. 出现名为打开类型的对话框。在这里您可以找到 PluginSessions 类的来源。如果您有多个包含 PluginSessions 类的jar,而不是列出它们。
  4. 要从这个 CTRL + SHIFT + T 技巧中受益,您需要添加项目中所有需要的jar,以便添加到classpath