JavaSPI-ServiceLoader-添加多个JAR';s到应用程序类路径

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

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


谢谢你的帮助

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

您只需要(a)一个用这些目录中所有JAR文件的URL构造的URLClassLoader,以及(b)调用。

不需要。您根本不需要自定义类加载器。太好了!谢谢我猜动态加载JAR的唯一方法是通过URLClassLoader。不管怎样,它工作得很好。我没有意识到,ServiceLoader.load()方法被第二个参数-ClassLoader重载了……我知道我遗漏了什么!