是否可以动态地将JAR加载到正在运行的Java应用程序中?

时间:2011-04-28 11:46:20

标签: java classloader

我的Java应用程序中有插件系统。是否可以动态地将JAR / Java类加载到您的应用程序中,或者我是否必须将这些JAR / Java类包含到我的应用程序中?

我的想法是将插件加载到应用程序然后调用此类的接口方法,而无需重新启动Java应用程序。这有可能甚至是明智的吗?

3 个答案:

答案 0 :(得分:10)

我建议使用OSGi进行动态插件加载/卸载。它处理所有类加载的东西。如果你不能使用OSGi,你将不得不使用自己的类加载器并使用你要加载的jar文件的位置来配置它们。

答案 1 :(得分:4)

您可以通过使用自己的ClassLoader来定位JAR文件并将类字节返回给JVM。从sun:http://java.sun.com/developer/onlineTraining/Security/Fundamentals/magercises/ClassLoader/help.html

看一下这个教程

答案 2 :(得分:4)

我也推荐OSGi,但是对于一个更简单的基于插件的系统,请查看java插件框架。它旨在简化基于插件的系统,可以在http://jpf.sourceforge.net/找到。

正如@Liv所提到的,像URLClassLoader这样的东西可以用于简单的一次性加载,但它是一个快速修复,而不是插件加载系统的良好起点。