Java SPI - ServiceLoader - 向APP类路径添加多个JAR

时间:2012-07-12 08:18:00

标签: java jar classpath serviceloader

我在项目中实现此逻辑时遇到问题。我使用ServiceLoader,我不知道,或者它是否可能,但我想动态地将JAR添加到app的某个已知目录,因此应用程序可以在启动时加载它们。我唯一获得的是我知道如何创建可扩展的ONE JAR(使用META-INF / services),因此我可以为此JAR添加越来越多的提供者和类(实现)。 JAR被包含在类路径中,就像普通的库一样,所以app知道它。我想要实现的目标: 我不想扩展一个jar文件,但是我想通过添加更多的jar来扩展应用程序,比如插件与提供者(服务),但我不知道如何。

感谢您的帮助!

2 个答案:

答案 0 :(得分:4)

您只需要(a)URLClassLoader,它使用这些目录中所有JAR文件的URL构建,并且(b)调用ServiceLoader.load(Class service, ClassLoader loader)

答案 1 :(得分:0)

我认为您可以创建一个客户ClassLoader。 ClassLoader将以动态模式从jar加载类。 许多框架都有一些非常像你想要的功能。你可以在其中查看一些代码。在jetty中的WebAppClassLoader类可能是一个起点!