2015-10-17 54 views
1

我正在嘗試使用Felix Dependency捆綁包在Apache Felix上運行應用程序。由於某種原因,容器不能加載我的包。Felix捆綁failng加載

我正在使用Eclipse中的Bndtools進行開發。我正在使用Amdatu包。

我關心的束是在我的「運行要求」包:

org.apache.felix.dependencymanager 
org.apache.felix.dependencymanager.shell 
org.apache.felix.dependencymanager.runtime 
osgi.core 
osgi.cmpn 

上述所有的包都從Amdatu倉庫取。

我有我創建了兩個包:

com.test.demo.reader 
com.test.demo.listener 

而且這些捆綁使用org.apache.felix.dependencymanager和osgi.core建成。

當我嘗試運行OSGi中,我得到了以下故障:

! could not resolve the bundles: [com.test.demo.reader-1.0.0 Unresolved constraint in bundle 
com.test.demo.reader [8]: Unable to resolve 8.0: missing requirement 
[8.0] osgi.wiring.package; (&(osgi.wiring.package=org.apache.felix.dm)(version>=3.0.0)(!(version>=4.0.0))), 
com.test.demo.listener-1.0.0 Unresolved constraint in bundle com.test.demo.listener [9]: 
Unable to resolve 9.0: missing requirement [9.0] osgi.wiring.package; 
(&(osgi.wiring.package=com.test.demo.reader)(version>=1.0.0)(!(version>=2.0.0))) 
[caused by: Unable to resolve 8.0: missing requirement [8.0] osgi.wiring.package; 
(&(osgi.wiring.package=org.apache.felix.dm)(version>=3.0.0)(!(version>=4.0.0)))]] 

! Failed to start bundle com.test.demo.reader-1.0.0, exception Unresolved constraint in 
bundle com.test.demo.reader [8]: Unable to resolve 8.0: missing requirement [8.0] 
osgi.wiring.package; (&(osgi.wiring.package=org.apache.felix.dm)(version>=3.0.0) 
(!(version>=4.0.0))) 

! Failed to start bundle com.test.demo.listener-1.0.0, exception Unresolved constraint in 
bundle com.test.demo.listener [9]: Unable to resolve 9.0: 
missing requirement [9.0] osgi.wiring.package; (&(osgi.wiring.package=com.test.demo.reader) 
(version>=1.0.0)(!(version>=2.0.0))) [caused by: Unable to resolve 8.0: missing requirement 
[8.0] osgi.wiring.package; (&(osgi.wiring.package=org.apache.felix.dm)(version>=3.0.0) 
(!(version>=4.0.0)))] 

我想我明白髮生了什麼:顯然,正在使用的org.apache.dm軟件包是一個與我的軟件包不兼容的版本。但這沒有任何意義,因爲根據Felix文檔,org.apache.dm包位於org.apache.felix.dependencymanager包中。該軟件包來自Amdatu存儲庫,它是我用於我的應用程序的唯一版本的軟件包!當它們是我的捆綁包知道的唯一版本時,該版本與我的捆綁軟件不兼容?

有人請指教。是什麼導致了這個失敗,我該如何修復它?

+0

處於主動/ resolved狀態的3個菲利克斯DM包?它們是什麼版本,3.0.0,3.1.0或3.2.0? – earcam

+0

3捆綁顯然無法解決(基於失敗消息)。我錯誤地認爲它在運行時包中,但它實際上是在org.apache.felix.dependencymanager包中(我將在我的原始文章中更正這個)。 Amdatu軟件包附帶的軟件包版本是4.0.2(我認爲)。我懷疑我可能需要找到更早的版本。我會看看我是否可以找到並更新發生的事情...... –

回答

-1

問題是我運行的運行時間和Amdatu插件中的錯誤。

我不會建議在您的OSGi項目中使用Amdatu配置。不是目前的形式。

我從Amdatu使用的各種Felix Dependency捆綁軟件顯然是打算在Felix版本5下運行。不幸的是,Amdatu環境(當您爲項目選擇配置模板時可以選擇的「Amdatu配置」 )不加載版本5.當您選擇「Bundle-Hub配置」時,您選擇的運行時環境包括從版本4.0.2到版本5.2的所有Felix環境以及多個版本的Equinox。當您選擇「Amdatu配置」時,只有運行時選擇是Felix 4.0.2和Felix 4.2.0。

我正在使用4.2.0 Felix,結果是依賴包不起作用。

目前形式的Amdatu環境在Bndtools中無法使用。它顯然爲版本5提供了正確的捆綁包,但不爲用戶提供該環境。

我嘗試手動更改運行時環境io版本5.2。這不起作用,因爲顯然當你選擇一個模板時,Bndtools會將任何運行時間與模板關聯起來。由於Amdatu模板不包含Felix版本5,因此運行時環境不可用。

爲了讓我的應用程序運行,我必須創建一個使用「Bundle-Hub」模板的新項目,並從Felix網站手動下載依賴項包,並將它們包含在我的buil和運行時環境中。不幸的是,在選擇模板之後,Bndtools和Amdatu都沒有提供任何方式將Amdatu包添加到項目中。這意味着您不必使用Amdatu現成的捆綁包,而必須到源網站並手動包含它們。

我可能會ty並找到一種方法來創建一個可以包含在項目中幷包含所有Amdatu包的新存儲庫,然後將該存儲庫包含在「Bundle Hub」模板中。我還會向Amdatu人員報告環境問題(以及我見過的其他問題)。

與此同時,我的應用程序運行正常,現在我已經設置了正確的運行環境。

特別感謝earcam,其上述問題在評論給了我一個線索如何開始尋找解決這個問題...

+0

「既不Bndtools ...提供任何方式來添加模板後選擇」。根本不真實!只需拖放到您的回購捆。工具欄上還有一個「添加」按鈕。這種錯誤信息幫助沒有人。 –

+0

澄清:我所指的捆綁包是與Amdatu模板一起提供的Amdatu捆綁包。如果您選擇:Bundle-Hub「模板,那麼由」Amdatu「模板​​提供的存儲庫變得無法訪問。因此,一旦選擇了另一個模板,無法在Amdatu存儲庫中添加這些包。 –

+0

仍然不是真實的!模板只是起點......你可以在創建工作空間後添加/刪除存儲庫並在存儲庫中添加/刪除包 –