如何使用OSGI打包和使用现有Java库

mah*_*nya 7 java legacy osgi

在请求帮助管理Java中相同库的不同版本的依赖关系之后,有人建议我应该看看OSGI实现.在最后期限的压力下,我真的可以使用一些帮助来帮助我从无休止的OSGI文档中挖掘出来.我有一个工作的应用程序,它将使用一个新的框架.框架使用我已经使用的不同版本的jar,所以我想将新框架打包为OSGI包.我可以保留我的应用程序,并将OSGI包仅用作JVM中的容器吗?这意味着我将仅使用OSGI包来从JVM的其余部分中隔离一组类,以避免不同版本的类之间发生冲突.换句话说,我想使用OSGI而不将我的所有代码都带到基于OSGI的设置.

亲切的问候Seref

Thi*_*ilo 3

我在这里没有完整的答案,我只是想反驳 deterb 所说的:

首先,您必须将整个应用程序置于 OSGi 框架内。

那不是真的。另一种方法是将 OSGi 容器嵌入到主机应用程序中。

这里棘手的部分是 OSGi 内部和外部之间的交互,因为代码位于不同的类加载器上。

您可以使用 OSGi 系统类路径使主机类对 OSGi 部分可见。反之则更困难。

主机代码与捆绑包交互的一种方式是主机应用程序和捆绑包(即主机的一部分)都可见的接口。另一种方法是使用反射。

如果主机和 OSGi 之间有明确的分离,例如插件系统,那么这可以很好地工作。

面临最后期限的压力

这可能是个问题。OSGi 有很多东西需要学习,而且由于它即将成为主流,因此仍然缺乏社区知识、工具支持、库兼容性等。

此时您应该问的最大问题是:我真的需要在运行时管理不同版本的依赖项吗?如果没有,即您可以在部署时解决问题(例如通过配置),那么可能有一个更简单的解决方案适合您。