我是 OSGI 框架的新手。我浏览了这些站点并阅读了有关 OSGI 框架的信息。坦白说,我什么都不懂。以下是我的疑惑
- OSGi 应该提供模块化。我们不能通过普通的罐子来实现模块化吗?
- OSGi 具有动态组件模型是什么意思?
- 捆绑包可以安装、启动、停止、更新等。为什么我们要安装捆绑包?为什么我们不能像访问其他普通 jar 一样直接访问?
我完全糊涂了。有人可以回答我吗?如果有可能也举一些例子。
我是 OSGI 框架的新手。我浏览了这些站点并阅读了有关 OSGI 框架的信息。坦白说,我什么都不懂。以下是我的疑惑
我完全糊涂了。有人可以回答我吗?如果有可能也举一些例子。
我对模块的定义是一个封装单元(即它隐藏了内部细节),它通过契约(即一组预定义的可能交互)与其他模块通信。JAR 文件不是模块,因为它不具备这些属性。没有封装,所有内部实现细节都是可见的,可以从外部访问。没有合同,您只需将 JAR 文件放在类路径中,并希望它提供您想要的功能。
动态意味着可以在运行时安装、升级或卸载 OSGi 包(模块) 。这对于升级正在运行的系统或跨大型网络有效地部署软件非常有用。
必须安装捆绑包,因为在我们使用软件之前总是必须安装它。JAR 文件也必须安装!只是安装方式略有不同,即 JAR 文件被添加到类路径中,而捆绑包是使用install
命令安装的(这也可以通过脚本编写或从 API 调用)。OSGi 让我们可以更好地控制这个过程。
我试图在 OSGi 博客中回答你的第一个问题:http: //blog.osgi.org/2013/08/dear-prudence-cant-we-achieve.html
下周,将回答下一个。
除了 Bundles 作为真正的模块这一点(在所有其他答案中都已处理)之外,还有一些其他特性使 OSGi 非常强大:
阅读有关 OSGi 规范的实现可能会有所帮助。
如果您使用过 Eclipse,那么您已经体验过 OSGi 的一些优势,甚至可能不知道。
这是对 Equinox 基础知识的一个很好的描述。