8.4. 如何跟踪缺少的依赖项


要跟踪缺少的依赖项,请执行以下步骤:

  1. 使用 bundle:diag console 命令。这将提供有关为什么您的捆绑包不活跃的信息。有关使用信息,请参阅 Apache Karaf 控制台参考
  2. 执行快速检查,以确保在 OSGi 容器中实际安装了所有必需的捆绑包和功能。您可以使用 bundle:list 检查已安装哪些捆绑包,并且 features:list 来检查安装了哪些功能。
  3. 使用 bundle:install console 命令安装(但不启动)您的捆绑包。例如:

    karaf@root()> bundle:install MyBundleURL
  4. 使用 bundle:dynamic-import console 命令在您刚才安装的捆绑包中启用动态导入。例如,如果捆绑包的捆绑包 ID 是 218,您可以通过输入以下命令在这个捆绑包上启用动态导入:

    karaf@root()> bundle:dynamic-import 218

    此设置允许使用容器中已安装的 任何 捆绑包解析依赖项,从而有效地绕过常见的依赖关系解析机制(基于 Import-Package 标头)。对于正常部署,这 不会被 重新处理,因为它绕过了版本检查:您可以轻松地获取错误的软件包版本,从而导致应用程序出现故障。

  5. 现在,您应该可以解析您的捆绑包。例如,如果您的捆绑包 ID 是 218,请输入 followng console 命令:

    karaf@root()> bundle:resolve 218
  6. 假设您的捆绑包现已解决(使用 bundle:list检查捆绑包状态),您可以使用 package:imports 命令获取所有软件包的完整列表。例如,如果您的捆绑包 ID 是 218,请输入以下命令:

    karaf@root()> package:imports -b 218

    您应该在控制台窗口中看到依赖软件包列表:

    Package                              │ Version       │ Optional   │ ID  │ Bundle Name
    ─────────────────────────────────────┼───────────────┼────────────┼─────┼──────────────────────────────────
    org.apache.jasper.servlet            │ [2.2.0,3.0.0) │ resolved   │ 217 │ org.ops4j.pax.web.pax-web-runtime
    org.jasypt.encryption.pbe            │               │ resolved   │ 217 │ org.ops4j.pax.web.pax-web-runtime
    org.ops4j.pax.web.jsp                │ [7.0.0,)      │ resolved   │ 217 │ org.ops4j.pax.web.pax-web-runtime
    org.ops4j.pax.web.service.spi.model  │ [7.0.0,)      │            │ 217 │ org.ops4j.pax.web.pax-web-runtime
    org.ops4j.pax.web.service.spi.util   │ [7.0.0,)      │            │ 217 │ org.ops4j.pax.web.pax-web-runtime
    ...
  7. 解包您的捆绑包 JAR 文件,并查看 META-INF/MANIFEST.MF 文件中的 Import-Package 标头下列出的软件包。将此列表与上一步中找到的软件包列表进行比较。现在,编译清单 Import-Package 标头中缺少的软件包列表,并将这些软件包名称添加到项目的 POM 文件中 Maven 捆绑插件配置的 Import-Package 元素中。
  8. 要取消动态导入选项,您必须从 OSGi 容器卸载旧的捆绑包。例如,如果您的捆绑包 ID 是 218,请输入以下命令:

    karaf@root()> bundle:uninstall 218
  9. 现在,您可以使用导入的软件包更新列表重建捆绑包,并在 OSGi 容器中进行测试。

addurl :experimental: :toc: :toclevels: 4 :numbered:

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.