2012-08-11 42 views
7

如何找到導出包的包?找到導出包的OSGI包?

我使用felix,我有一個像「com.test」這樣的字符串,我怎麼知道哪個包導出了這個包?

我不想使用PackageAdmin,因爲它已被棄用,而且我不想爲每個包獲取Export-Package標題並解析它。

任何想法?

回答

11

這聽起來像你想以編程方式做到這一點,而不是在Gogo shell ...至少我會從你的問題的措辭假設。

沒有真正的方法來說「哪個包」導出給定的包,因爲可以有許多包導出任何給定的包,並且該包可以被許多包中的許多包使用。如果您有特定的軟件包,並且想知道哪個軟件包提供了軟件包com.test,則可以獲取導入軟件包的接線Bundle.adapt(BundleWiring.class),然後使用BundleWiring.getRequiredWires()獲取所有軟件包相關性的提供程序。

從那裏,你只需要找到osgi.wiring.package命名空間你想要的包線,則該線的供應商將是你有興趣在該包的BundleRevisionBundleCapability

+0

這基本上是我正在尋找的。這是一個恥辱,我必須通過所有捆綁,並檢查這個。我希望在框架上有一個方法,這裏有一個包,哪個包滿足它?鑑於這是框架在幕後進行的工作,無論如何它必須解決依賴關係。但無論如何,謝謝你的答案。 – Boomah 2012-08-13 10:18:54

2

您試過了: exports | grep com.test?

+0

對不起,我應該說我想做這個編程 – Boomah 2012-08-13 10:12:52