在包版本明显不匹配的情况下,SLF4J OSGi如何工作?



在我看过的SLF4J 1.6.0之后的所有版本中,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可能掩盖了这个问题。我错过什么了吗?
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包的版本必须至少和实现包的版本一样大

最新更新