1.5. OSGi 捆绑包

概述

借助 OSGi,您将应用程序模块化到捆绑包中。每个捆绑包都是一个紧密耦合的、可动态加载的类、JAR 和配置文件的集合,该文件明确声明任何外部依赖项。在 OSGi 中,捆绑包是主要的部署格式。捆绑包(bundle)是打包在 JAR 中的应用程序,可以安装、启动、停止、更新和删除应用程序。

OSGi 为开发捆绑包提供了一个动态、简洁、一致的编程模型。开发和部署可通过从其实施中分离服务规格(Java 接口)来简化。

OSGi 捆绑包抽象允许模块共享 Java 类。这是静态的重复使用形式。当依赖捆绑包启动时,必须可用共享类。

捆绑包是 JAR 文件,在其 OSGi 清单文件中包含元数据。捆绑包包含类文件,以及可选的其他资源和原生库。您可以明确声明捆绑包中的哪些软件包在外部可见(导出的软件包)以及捆绑包需要哪些外部软件包(导入的软件包)。

模块层处理捆绑包与从其他捆绑包中打包和共享软件包之间的打包和共享。OSGi 框架会在捆绑包间动态地解决依赖项。框架执行捆绑包解析,以匹配导入和导出的软件包。它还可管理多个版本的部署捆绑包。

OSGi 中的类加载

OSGi 使用图形模型进行类加载,而非树结构模型(供 JVM 使用)。捆绑可以以标准化的方式共享和重新使用类,不会加载运行时类冲突。

每个捆绑包都有自己的内部类路径,以便在需要时可以作为独立单元服务。

OSGi 中类载入的好处包括:

  • 直接在捆绑包间共享类。不需要将 JAR 提升到父类加载程序。
  • 您可以同时部署同一类的不同版本,且无冲突。