以下是我爲了得到這個工作所必須做的。
我不得不將com.sun.management添加到系統包的systemProperties值,因爲我是OSGI的新手,這讓我花了一段時間才弄清楚。我使用maven-pax-plugin,所以我需要添加以下屬性。默認情況下它不起作用的原因是equinox默認情況下,我選擇的osgi容器不包括系統包中的com.sun。*包。
通過使用bundle 0命令查看系統捆綁包,這顯而易見,因爲捆綁包0始終是系統捆綁包,這對我而言是新事物。
<param>--sp=com.sun.management</param>
在添加此命令後,系統軟件包包含com.sun.management,並且我的軟件包部署時沒有問題。
默認情況下equinox不包括systemProperties中的com.sun包的原因見here。 (一個直接調用sun程序包的Java程序並不能保證可以在所有Java兼容的平臺上運行,事實上,即使在同一平臺的未來版本中,這樣的程序也不能保證能正常工作。)
所以你有兩個選項可以將com.sun添加到osgi容器中。
解決方案A':擴展束
這些作爲片段;它們不是自己的捆綁,而是附屬於主機。擴展束是一種特殊類型的片段,僅附加到系統包,以便提供框架的可選部分。我們可以使用這種機制來創建一個空的擴展,它只聲明所需的包,並將加載留給它的託管包(在這種情況下爲框架)。由於第二種方案實施起來更快,我沒有選擇這條路線。
解決方案B:啓動代表團
我在年底拍得的選擇是啓動代表團。這允許用戶創建「隱含」的包,這些包將始終由框架父類加載器加載,即使這些包沒有提供正確的導入。我通過設置系統包來包含com.sun.management來實現。
請參閱以下優秀的link,以更詳細地描述整個問題。
感謝VonC對不起,我正在嘗試解決依賴性問題。該軟件包在rt.jar中,它是jre lib的一部分,所以我很謹慎地包裝它,但我會放棄它並在這裏報告。 – 2010-04-14 07:24:48
@Paul:在封裝rt.jar之前,也許這個線程也可以提供幫助:http://www.mail-archive.com/[email protected]/msg00518.html – VonC 2010-04-14 07:36:50
非常感謝鏈接指向我在正確的方向上,我添加了以下關於com.sun包默認不包含的原因的詳細信息。 – 2010-04-14 14:42:17