簡體   English   中英

在Netbeans和Karaf中開發OSGI捆綁包時如何管理依賴項?

[英]How to manage dependencies when developing OSGI bundle in Netbeans and Karaf?

我一直在努力開發OSGI捆綁包以發布到Karaf。 創建新項目時,我正在使用Netbeans 7.4和Create Maven OSGI捆綁軟件。 我認為我正在努力的是處理不同項目之間的依賴關系,並在Netbeans中使用它們,然后發布到Karaf。

我想做的是設置一個REST Web服務。 我發現本教程是入門和開始基本操作的良好起點。 因此,我開始用子項目設置一個父項目(所有這些都來自Maven OSGI Bundle模板)。 但是,當我開始將捆綁包部署到我的Karaf實例后,我開始為Karaf中的“缺少要求”錯誤而苦惱。 我將開始嘗試在<Export-Package><Embed-Dependency>列出每個依賴項,但似乎我一直走得更遠,總是收到列出另一個依賴項的新“缺少要求”消息。 然后,我開始嘗試使用maven復制依賴項插件導出項目中使用的所有依賴項,並將所有結果復制到Karaf部署文件夾中。 這在大多數情況下都是有效的,但是我正在努力解決我認為是第三方jar的下游依賴性的問題,但是無論如何這可能是一個單獨的問題。

因此,我想知道的是,我應該如何使用此設置開發一個連貫的“應用程序”? 我知道我應該將所有內容分成獨立的捆綁包; 即,我將REST接口作為一個接口,將實現作為另一個接口,將業務邏輯作為另一個接口。 作為一個maven項目,如果我對日期時間處理或字符串實用程序具有依賴性,則maven將處理所有這些解析。 但是這些依賴關系不會自動包含在我的OSGI捆綁軟件中,是這樣嗎? 確保我的項目所依賴的所有內容均可用於Karaf中的捆綁包的工作流程是什么? 如果我的項目具有其他項目作為依存關系,即接口實現,該怎么辦? 我會將該項目作為依賴項包括在內,以便對其進行編譯,但是如何確保在發布該依賴項后該依賴項得到滿足?

使用OSGi時,在編譯時和部署時依賴關系之間的不匹配確實是一個問題。

您需要知道的是它們之間如何相互聯系。 在編譯時,您具有maven依賴項。 在構建項目時,maven捆綁插件會為您創建必要的Import-Package和Export-Package語句。 在大多數情況下,這很簡單,您應該避免在此手動調整太多。

因此,在構建清單之后,清單會指定所需的結果包,但這不會自動確保滿足依賴關系。 因此,當您將捆綁軟件部署到karaf時,會出現有關缺少依賴項的錯誤。 這很正常。

現在,您需要安裝其他滿足這些依賴關系的捆綁軟件。 通常,您可以簡單地安裝Maven依賴項的jar(如果它們是捆綁包)。 但是,這並不總是有效。 因此,基本上,您需要安裝捆綁軟件,然后檢查是否滿足要求。

karaf的好處是,許多較大的依賴項(例如cxf)已經可以用作功能。 因此,最好先嘗試通過安裝可用功能來獲取依賴項,然后再嘗試逐捆綁安裝它們。

因此,這有助於您正確地建立依賴關系。 然后,對於“生產”,最好的解決方案是創建自己的功能文件,在其中引用找到的包。

雖然一開始使用deploy dir安裝捆綁軟件看起來不錯,但這不是一個好的解決方案。 最好使用mvn:karaf提供的url語法直接從maven安裝捆綁軟件。

關於嵌入依賴性。 有時,這是一個很好的解決方案,但通常只會使情況變得更糟,因為它可能導致難以解決的軟件包使用沖突。 因此最好不要嵌入任何東西。

暫無
暫無

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

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