【发布时间】:2017-01-15 16:01:21
【问题描述】:
我希望允许用户为我的应用程序编写他们自己的插件。用法很简单,在应用程序启动后,它会在某个文件系统路径中搜索 jar 文件并加载所有这些文件。所有 jar 都依赖于我向客户发布的 PluginFramework。
现在,问题:
- 是否可以在插件的 jar Manifest 文件中添加 PluginFramework 版本并通过代码进行验证?
- 如果某些插件共享相同的类名(当然还有包),我可以将它们加载到同一个类加载器中,还是需要为每个插件创建不同的类加载器?
- 插件类(由自定义类加载器加载)能否访问主类加载器加载的类? PluginFramework 类应在所有插件之间共享。
- 有没有办法卸载由特定类加载器加载的所有类?
谢谢。
【问题讨论】:
-
听起来像是 OSGi 的工作 - 也许您应该先阅读一些关于此的内容。不是为了开发一些自制解决方案,而是为了坚持众所周知的标准?您可以在 OSGi 中完成所有这些事情。
-
然而,使用 OSGi 是一件很痛苦的事情,因为您通常只想从某个地方加载一些额外的 jar。
-
@KonradSzałkowski 谢谢,我会阅读有关 OSGi 的信息,看看它是否适合我的需求
-
@KonradSzałkowski 确实使用 OSGi 要求在容器内运行我的应用程序,或者它可以是我刚刚添加到我的类路径中的某个库吗?
标签: java plugins classloader