在我在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可能会掩盖这个问题。我错过了什么吗?
答案 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包版本必须至少与实现包的版本一样大。