在java应用程序中加载用户代码

时间:2017-01-15 16:01:21

标签: java plugins classloader

我想允许用户为我的应用程序编写自己的插件。用法很简单,在应用程序启动后,它会搜索一些文件系统路径以获取jar文件并加载所有这些文件。所有罐子都依赖于我发给客户的PluginFramework。

现在,问题:

  1. 是否可以将PluginFramework版本添加到插件的jar清单文件并从代码中验证?
  2. 如果某些插件共享相同的类名(当然还有包),我可以将它们加载到同一个类加载器中,还是需要为每个插件创建不同的类加载器?
  3. 插件类(由自定义类加载器加载)是否可以访问主类加载器加载的类? PluginFramework类应该在所有插件之间共享。
  4. 有没有办法卸载特定类加载器加载的所有类?
  5. 感谢。

1 个答案:

答案 0 :(得分:1)

我之前写了一个小插件系统。所以我会回答你的一些问题。

  1. 不知道,我想是的。

  2. 如果插件使用完全相同的包,则需要单独的类加载器。我没有这样做,因为jar确定了包装的名称的一部分,所以它们会自动独特(不能将两个同名的罐子放在一个文件夹中)

  3. 是的,他们可以。

  4. 是的,如果没有任何内容引用这些类和类加载器,它将获得GC,请参阅:Unloading classes in java?