如何获取 jar class 来自
How to get jar class is coming from
我目前正在为服务器软件开发 API,这样用户就可以通过为其编写插件来扩展我的软件,而不是自己修改软件,并允许没有编程知识的其他用户轻松更改软件通过添加这些插件。到目前为止,一切正常。但是,我 运行 遇到配置问题。
你看,每个插件都有一个 plugin.yml 文件,其中存储了这 4 个属性:
main:主要的class存放在这里
名称:这是存储插件名称的地方
版本:这是存储插件版本的地方
author:这里存放插件作者
现在,为了让插件向控制台打印一些东西,他们使用了一个名为:this.getServer().getLogger().info("MESSAGE); (They extend another class for plugins, thats why they use "this" 的函数,而不是另一个 class 记录)
但是,当他们调用函数时,我不知道如何获取哪个插件。我有一个 PluginSessions 的 ArrayList,事件处理程序使用它循环到 运行 事件函数。
我的解决方案是获取调用 class 的 jar,这样我就可以从那里获取 plugin.yml。但是,我不知道如何得到它,我试过使用 Class.forName();和其他一些代码。但是因为 class 在 jar/project 运行 代码中不存在,它会抛出 ClassNotFoundException。
这里有人知道如何在不使用 Class.forName() 的情况下获取 class 来自的罐子吗?谢谢! -特伦特
假设 'PluginSessions' 的 jar 已经通过 eclipse 添加到你的 classpath 那么你可以试试以下技巧 -
- Select/highlight PluginSessions 双击它
- 现在按 CTRL+SHIFT+T
- 出现一个名为 Open Type 的对话框。在这里,您可以找到 PluginSessions class 的来源。如果你有不止一个包含 PluginSessions class 的 jar,那么你有一个列表。
要从这个 CTRL+SHIFT+T 技巧中受益,您需要添加项目需要的所有 jar 以添加到您的 classpath
。
看看Class.getResource
。
如果你调用 MyClass.getResource("plugin.yml")(或带前导斜线的“/plugin.yml”,我忘记了)你会得到一个文件 URL 指向plugin.yml 文件在与 MyClass 相同的 jar 中。 (或者 null
如果路径错误或者 jar 不包含 "plugin.yml" 文件。)然后您可以打开该资源的 InputStream。在插件框架中,您可能希望使用 myPluginInstance.getClass().getResource
。
我目前正在为服务器软件开发 API,这样用户就可以通过为其编写插件来扩展我的软件,而不是自己修改软件,并允许没有编程知识的其他用户轻松更改软件通过添加这些插件。到目前为止,一切正常。但是,我 运行 遇到配置问题。
你看,每个插件都有一个 plugin.yml 文件,其中存储了这 4 个属性: main:主要的class存放在这里 名称:这是存储插件名称的地方 版本:这是存储插件版本的地方 author:这里存放插件作者
现在,为了让插件向控制台打印一些东西,他们使用了一个名为:this.getServer().getLogger().info("MESSAGE); (They extend another class for plugins, thats why they use "this" 的函数,而不是另一个 class 记录)
但是,当他们调用函数时,我不知道如何获取哪个插件。我有一个 PluginSessions 的 ArrayList,事件处理程序使用它循环到 运行 事件函数。
我的解决方案是获取调用 class 的 jar,这样我就可以从那里获取 plugin.yml。但是,我不知道如何得到它,我试过使用 Class.forName();和其他一些代码。但是因为 class 在 jar/project 运行 代码中不存在,它会抛出 ClassNotFoundException。
这里有人知道如何在不使用 Class.forName() 的情况下获取 class 来自的罐子吗?谢谢! -特伦特
假设 'PluginSessions' 的 jar 已经通过 eclipse 添加到你的 classpath 那么你可以试试以下技巧 -
- Select/highlight PluginSessions 双击它
- 现在按 CTRL+SHIFT+T
- 出现一个名为 Open Type 的对话框。在这里,您可以找到 PluginSessions class 的来源。如果你有不止一个包含 PluginSessions class 的 jar,那么你有一个列表。
要从这个 CTRL+SHIFT+T 技巧中受益,您需要添加项目需要的所有 jar 以添加到您的 classpath
。
看看Class.getResource
。
如果你调用 MyClass.getResource("plugin.yml")(或带前导斜线的“/plugin.yml”,我忘记了)你会得到一个文件 URL 指向plugin.yml 文件在与 MyClass 相同的 jar 中。 (或者 null
如果路径错误或者 jar 不包含 "plugin.yml" 文件。)然后您可以打开该资源的 InputStream。在插件框架中,您可能希望使用 myPluginInstance.getClass().getResource
。