2016-09-28 36 views
0

在我已經看了1.6.0後SLF4J的所有版本中,SLF4J的API MANIFEST.MF樣子(這是1.7.21):SLF4J OSGi如何在軟件包版本中顯示不匹配?

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

但後端(如slf4j- log4j12)說:

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

這不合適,它會導致未解決的封裝佈線。

我知道很多人在OSGi中使用SLF4J。哎呀,使用它,它的工作原理,但pax日誌記錄可能會模糊這個問題。我錯過了什麼嗎?

回答

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

在進口包裝指定一個確切的版本意味着1.6.0版本或更高。因此這條線不會導致一個未解決的包。

但是,所有的SLF4J實現包都需要API。通過這個規則,我們得到了循環依賴。 SLF4J通過將每個實現捆綁爲API的片段包來解決這個問題。

在每一個實現捆綁,你可以看到這些:

Fragment-Host: slf4j.api 

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

基於該清單的標題:實現捆綁必須至少1.6.0版本和API軟件包版本必須至少與實現包的版本一樣大。

+0

哦。我認爲你需要[1.6.0,2.0)來獲得'至少'。 – bmargulies

+0

但現在我知道更好。 – bmargulies

+1

來自osgi-core規範:因此,API的使用者應該導入一個以基本版本開始的範圍,並在下一個主要更改時結束 ,例如:[4.2,5)。 API的提供者應該導入一個範圍 以基礎版本開始,直到下一個小的更改,例如:[4.2,4.3).'。另外:'如果版本範圍被指定爲單個版本,則它必須被解釋爲範圍[版本,∞)。' – Renato

相關問題