我想允许用户为我的应用程序编写自己的插件。使用方法非常简单,应用程序启动后,它会在某个文件系统路径中搜索 jar 文件并加载所有文件。所有jar都依赖于我发布给客户的PluginFramework。
现在,问题:
- 是否可以将 PluginFramework 版本添加到插件的 jar Manifest 文件中并通过代码进行验证?
- 如果某些插件共享相同的类名(当然还有包),我可以将它们加载到同一个类加载器中,还是需要为每个插件创建不同的类加载器?
- 插件类(由自定义类加载器加载)可以访问由主类加载器加载的类吗? PluginFramework 类应该在所有插件之间共享。
- 有没有办法卸载特定类加载器加载的所有类?
谢谢。
最佳答案
我之前写过一个小插件系统。那我就回答一下你的一些问题。
不知道,我想是这样。
如果插件使用完全相同的包,您将需要一个单独的类加载器。我没有这样做,因为 jar 名称的一部分决定了包,因此它们将自动是唯一的(不能将两个具有相同名称的 jar 放在一个文件夹中)
是的,他们可以。
是的,如果没有任何内容引用这些类和类加载器,它将被 GC 处理,请参阅:Unloading classes in java?
关于java - 在java应用程序中加载用户代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41663138/