SLF4J OSGi如何在包版本中明显不匹配?

时间:2016-09-28 14:05:25

标签: osgi slf4j

在我在1.6.0之后看过的所有版本的SLF4J中,slf4j-api MANIFEST.MF看起来像(这是在1.7.21中):

Import-Package: org.slf4j.impl;version=1.6.0

但是后端(例如slf4j-log4j12)说:

Export-Package: org.slf4j.impl;version=1.7.21

这不合适,导致未解决的封装布线。

我知道很多人在OSGi中使用SLF4J。哎呀,使用它,它可以工作,但pax-logging可能会掩盖这个问题。我错过了什么吗?

1 个答案:

答案 0 :(得分:2)

Import-Package: org.slf4j.impl;version=1.6.0

在Import-Package中指定确切版本意味着版本1.6.0或更高版本。因此,此行不会导致未解析的包。

但是,所有SLF4J实现包都需要API。通过这个规则,我们得到一个循环依赖。 SLF4J的人通过将每个实现捆绑包作为API的片段包来解决这个问题。

在每个实现包中,您都可以看到:

Fragment-Host: slf4j.api

Import-Package: org.slf4j;version=1.7.21,...

基于MANIFEST标头:实现包必须至少为1.6.0版,API包版本必须至少与实现包的版本一样大。