在我看过的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包的版本必须至少和实现包的版本一样大