8.4. 如何跟踪缺少的依赖项
要跟踪缺少的依赖项,请执行以下步骤:
-
使用
bundle:diag
console 命令。这将提供有关为什么您的捆绑包不活跃的信息。有关使用信息,请参阅 Apache Karaf 控制台参考。 -
执行快速检查,以确保在 OSGi 容器中实际安装了所有必需的捆绑包和功能。您可以使用
bundle:list
检查已安装哪些捆绑包,并且features:list
来检查安装了哪些功能。 使用
bundle:install
console 命令安装(但不启动)您的捆绑包。例如:karaf@root()> bundle:install MyBundleURL
使用
bundle:dynamic-import
console 命令在您刚才安装的捆绑包中启用动态导入。例如,如果捆绑包的捆绑包 ID 是 218,您可以通过输入以下命令在这个捆绑包上启用动态导入:karaf@root()> bundle:dynamic-import 218
此设置允许使用容器中已安装的 任何 捆绑包解析依赖项,从而有效地绕过常见的依赖关系解析机制(基于
Import-Package
标头)。对于正常部署,这 不会被 重新处理,因为它绕过了版本检查:您可以轻松地获取错误的软件包版本,从而导致应用程序出现故障。现在,您应该可以解析您的捆绑包。例如,如果您的捆绑包 ID 是 218,请输入 followng console 命令:
karaf@root()> bundle:resolve 218
假设您的捆绑包现已解决(使用
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 ...
-
解包您的捆绑包 JAR 文件,并查看
META-INF/MANIFEST.MF
文件中的Import-Package
标头下列出的软件包。将此列表与上一步中找到的软件包列表进行比较。现在,编译清单Import-Package
标头中缺少的软件包列表,并将这些软件包名称添加到项目的 POM 文件中 Maven 捆绑插件配置的Import-Package
元素中。 要取消动态导入选项,您必须从 OSGi 容器卸载旧的捆绑包。例如,如果您的捆绑包 ID 是 218,请输入以下命令:
karaf@root()> bundle:uninstall 218
- 现在,您可以使用导入的软件包更新列表重建捆绑包,并在 OSGi 容器中进行测试。
addurl :experimental: :toc: :toclevels: 4 :numbered: