簡體   English   中英

在與maven一起使用OSGI包時如何隱藏嵌入式依賴項?

[英]How to hide embedded dependencies when using an OSGI bundle with maven?

有沒有辦法使用OSGI包作為maven依賴,而不將其中的所有包都放入甚至不導出的類路徑中?

問題的背景:我們剛剛將org.apache.sling.xss包作為maven依賴項添加到我們的項目中。 正如您在pom.xml中看到 ,它只是導出包org.apache.sling.xss,但是將各種依賴項直接嵌入到它的jar中作為Private-Package 雖然OSGI從其他捆綁包中隱藏了這些東西,但maven卻沒有。 所以我們得到了沖突:org.apache.sling.xss嵌入了例如版本1.7.0的commons-beanutils,它與我們一直使用的較新版本的commons-beanutils不兼容,因此我們現在得到編譯錯誤。

有沒有什么好的解決方案 - 從我們的角度來看,從org.apache.sling.xss包的維護者的角度來看? 理想情況下,如果使用該包,則只能將導出的org.apache.sling.xss包添加到類路徑中。 所以,如果org.apache.sling.xss提供了一個單獨的API jar,那么也許一個很好的解決方案,只包含那個類? 有沒有標准的方法來做到這一點,或另一種解決方案? 我們能以某種方式告訴maven只將該包包含在類路徑中嗎? (我知道maven有依賴項排除 ,但這在這里沒有幫助,因為有問題的東西不是sling.xss的傳遞依賴,但實際上包含在org.apache.sling.xss jar中。)

不幸的是,沒有好辦法用maven處理這樣的捆綁。

建議的方法是將捆綁包拆分為僅定義API的API捆綁包以及導入API並導入或嵌入所有實現依賴關系的實現捆綁包。

這樣,消費者將只對API具有maven依賴性,並且根本不會發生問題。

你可以為吊索xss打開一個jira問題來提供API捆綁嗎?

您可以在構建系統中包含執行OSGi解析的步驟,例如使用bnd-export-maven-plugin

這樣,如果編寫依賴於另一個bundle的非導出包的代碼,則整個構建將失敗。 這是因為bnd會自動為您在捆綁包中使用的包添加Import-Package ,但解決步驟將無法在另一個捆綁Export-Package中找到相應的Export-Package

當然這並不理想。 您仍然可以在IDE中編寫代碼並使用maven-compiler-plugin編譯它。 但是你至少在遇到運行時之前就已經發現了問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM