1.5. OSGi 捆绑包
概述
借助 OSGi,您可以将应用程序模块化为捆绑包。每个捆绑包都是紧密耦合的、可动态加载的类、JAR 和配置文件的集合,明确声明任何外部依赖项。在 OSGi 中,捆绑包是主要的部署格式。捆绑包是打包在 JAR 中的应用程序,可以安装、启动、停止、更新和删除。
OSGi 为开发捆绑包提供动态、简洁且一致的编程模型。从实施中分离了服务的规格(Java 接口)可以简化开发和部署。
OSGi 捆绑包抽象允许模块共享 Java 类。这是静态的重复使用形式。当依赖捆绑包启动时,共享类必须可用。
捆绑包是一个 JAR 文件,其中包含其 OSGi 清单文件中的元数据。捆绑包包含类文件和(可选)其他资源和原生库。您可以明确声明捆绑包中的哪些软件包在外部可见(导出软件包),以及捆绑包需要哪些外部软件包(导入的软件包)。
模块层处理捆绑包和从其他捆绑包隐藏软件包之间的 Java 软件包打包和共享。OSGi 框架在捆绑包之间动态解决依赖项。框架执行捆绑包解析,以匹配导入和导出的软件包。它还可以管理已部署捆绑包的多个版本。
OSGi 中的类加载
OSGi 使用图形模型进行类加载,而不是树状模型(如 JVM 使用)。捆绑包可以以标准化的方式共享和重新使用类,无运行时类加载冲突。
每个捆绑包都有自己的内部类路径,以便在需要时可以充当独立的单元。
OSGi 中类加载的好处包括:
- 在捆绑包之间直接共享类。不需要将 JAR 提升到父类加载器。
- 您可以同时部署同一类的不同版本,且没有冲突。