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

标签 java plugins classloader

我想允许用户为我的应用程序编写自己的插件。使用方法非常简单,应用程序启动后,它会在某个文件系统路径中搜索 jar 文件并加载所有文件。所有jar都依赖于我发布给客户的PluginFramework。

现在,问题:

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

谢谢。

最佳答案

我之前写过一个小插件系统。那我就回答一下你的一些问题。

  1. 不知道,我想是这样。

  2. 如果插件使用完全相同的包,您将需要一个单独的类加载器。我没有这样做,因为 jar 名称的一部分决定了包,因此它们将自动是唯一的(不能将两个具有相同名称的 jar 放在一个文件夹中)

  3. 是的,他们可以。

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

关于java - 在java应用程序中加载用户代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41663138/

相关文章:

plugins - 为 AutoCAD 开发插件?

java - 3种依赖注入(inject)方式之间有什么区别?

java - 如何等待 WebElement 出现在 DOM 中?

java - 为什么即使在设置 JPanel 的大小后,我的框布局也会更改大小

javascript - 从 jQuery 插件返回 true 或 false

java - 在 Tomcat 中找不到 logback.xml(或其他资源)

java - 伺服监视器注释是否可以开箱即用?

javascript - 如何组合匿名函数?

java - 这个仪器如何完成

java - Tomcat下URLClassLoader慢