2

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

感谢帮助!

4

2 回答 2

6

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

于 2012-07-12T10:11:22.130 回答
0

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

于 2012-07-12T08:30:42.667 回答