2015-02-07 60 views
0

我目前正在开发一个服务器软件的API,以便用户可以通过编程插件来扩展我的软件,而不是自己修改软件,并允许其他没有编程知识的用户轻易更改该软件通过添加这些插件。到目前为止,一切工作正常。但是,我遇到了配置问题。如何获取jar类来自

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

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

但是,我做n对于如何获得哪个插件是在调用函数时有任何想法。我有一个PluginSession的ArrayList,事件处理程序用它循环来运行事件函数。

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

有没有人在这里知道如何从不使用Class.forName()的类从哪个jar中获取?谢谢!对于-Trent

回答

1

看一看Class.getResource。如果您调用MyClass.getResource(“plugin.yml”)(或带有前导斜杠的“/plugin.yml”,我忘记了),则会返回指向plugin.yml文件的文件URL,它与我的课。 (或者如果路径错误或者jar不包含“plugin.yml”文件,则为null)。然后可以打开一个InputStream到该资源。在插件框架中,您可能需要使用myPluginInstance.getClass().getResource

+1

非常感谢!现在我终于可以在我的插件会话类之外获得插件信息! :d – Whirvis 2015-02-08 18:59:36

0

假设罐子“PluginSessions”类路径通过Eclipse在你已经添加,那么你可以试试下面的技巧 - 它

  1. 选择/高亮PluginSessions通过双击
  2. 现在按CTRL + SHIFT + T
  3. 命名对话框开放型出现了。在这里你可以找到类的来源。如果您有超过一个包含PluginSessions类的广告瓶比您拥有它们的列表更多。

要从此CTRL + SHIFT + T招你需要的项目中添加所有的罐子需要受益于您的classpath添加。

+0

这不是我想要的答案。我说我想要能够获得一个类正在调用的jar(一个插件)通过代码,所以我可以得到插件。yml从jar中获取它的名字。 – Whirvis 2015-02-07 21:39:34