Java 原生 JAR 缺乏運行時模組概念、依賴聲明與版本控制、資訊隱藏機制,導致類別載入扁平化、版本衝突頻發。OSGi 透過 Bundle (增強版 JAR) 解決:
Import-Package/Export-Package 明確依賴與版本範圍[1.0.0,2.0.0)) 精確控制WebSphere 6.1+ 採用混合模式:核心插件以 OSGi Bundle 形式置於 plugins 目錄,其餘維持傳統類別載入層級。OSGi 部分透過網關與擴展類別載入器連接,處於較高層級。
案例:MailboxAPI v1 被 FixedMailbox 依賴,XMLMailbox 需升級至 MailboxAPI v2。傳統部署下共存 MailboxAPI.jar 與 MailboxAPI2.jar 會導致其中一個模組失效。解決方案:
FixedMailbox.jar、XMLMailbox.jar、MailboxAPI.jar(v1)、MailboxAPI2.jar(v2) 全部轉為 OSGi Bundle (僅增強 Manifest)FixedMailbox Import MailboxAPI v1,XMLMailbox Import MailboxAPI v2lib 目錄下舊 JAR,四個 Bundle 放入 plugins 目錄依賴關係從扁平衝突轉為版本化網狀結構,完美解決版本衝突。附完整 Manifest 範例與架構圖。