如何将API的依赖关系与使用它的主程序隔离开来?

New*_*ian 1 java plugins jar classloader dependency-management

我有一个系统,我通过一个定义良好的访问点创建一个插件.但是,有问题的插件使用了一些框架也使用但不同版本的jar.

代码的结构是一种方式,在框架中集成的代码(扩展插件扩展点)和执行实际工作的代码非常好地解耦(基本上归结为少于10个类的API).然而,在这几个类背后隐藏着一个相当大而复杂的系统(60+ jar依赖)

问题如下:

如何确保API类实例化的任何内容都是使用独立的jar文件私有库完成的?

换句话说,如何隔离插件以使其与自己的私有库一起运行而不会干扰主应用程序的库?

----编辑----到目前为止,只有两种方法可以实现,就是嵌入一个像OSGi这样的框架,或者提供我自己的类加载器实现.后者可以完成,并且在网上提出了许多变体,虽然我发现什么都不会让我对手头系统所需的稳定性充满信心.

这让我们回到OSGi,我希望有一个更轻量级的解决方案,但也许一旦我学会了技术,它将证明可以做我想要的而不需要太多的努力.

Pab*_*oni 5

这就是OSGi的用途.而Equinox是一个很好的实现.