java - 启动 slf4j 包无法在 felix 上启动

标签 java osgi bundle slf4j

我有 felix-framework-5.0.1 并且我正在尝试将 slf4j-api-1.6.0.jar bundle 到 felix isgi 容器中。

  1. 在 felix 控制台中,我输入 install file:bundle/slf4j-api-1.6.0.jar

  2. 我收到一条消息 bundle ID:42

  3. 然后我尝试启动 bundle start 42

  4. 我收到消息

org.osgi.framework.BundleException:无法解析 slf4j.api [42](R 42.0):缺少要求 [slf4j.api [42](R 42.0)] osgi.wiring.package; (&(osgi.wiring.p ackage=org.slf4j.impl)(version>=1.5.5)) Unresolved 需求:[[slf4j.api [42](R 42.0)] osgi.wiring.package; (&(osgi.wiring.package=org.slf4j.impl)(版本>= 1.5.5))] 克!

有人可以帮助我吗?如何将 slf4j bundle 到 felix 中?

最佳答案

slf4j-api 需要 org.slf4j.impl 包。这个包包含在每个 slf4j 实现中,例如 slf4j-simple、slf4j-logback 等。

实现包需要来自 API 工件的 org.slf4j 包。有一个交叉引用。这只能起作用,因为实现是 fragment bundles API 的。当实现与 API 一起安装时,它们将有一个公共(public)的类加载器,并且它们将一起解析。他们的两个要求都会得到满足。

简而言之:您必须选择其中一种实现并安装它。例如:slf4j-simple .

您应该使用相同版本的 API 和实现来满足他们的“交叉要求”。

关于java - 启动 slf4j 包无法在 felix 上启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31627427/

相关文章:

java - Android:如何使用加速度计计算设备掉落的高度?

java - 我的程序中的第二个扫描仪不会将输入值放入我的整数中?

java - 声明式服务组件满意和不满意

java - ServiceBus JAVA SDK高级重新加载错误,ServiceLoader(不是子类型)

java - OSGi 容器何时开始使用运行时添加的更新版本包的导出?

android - 无法从 onActivityReenter 中的 Intent 读取 Parcelable

java - Hibernate criteria API 查询继承问题

java - 向 Activity 发送包数据的 Android 服务为 NULL

ruby - 如何在 ubuntu 上找到 ruby​​ 和 bundle 的安装路径?

java - 在静态初始化程序中引用 Self