2011-05-04 70 views

回答

6

如果您沒有激活劑,你也可以試着問你的包:

Bundle b = org.osgi.framework.FrameworkUtil.getBundle(MyClass.this); 

如果返回null,類沒有被加載OSGi的。

+0

這與「getClass()。getClassLoader()instanceof org.osgi.framework.BundleReference」方法相比如何? OSGi版本的範圍 – 2011-05-05 02:43:33

+0

偷窺在實現中,它也依賴於BundleReference,並且可以從OSGi 4.2(eclipse 3.5.x?)上得到,我推薦它通過檢查實例,因爲它是API。 – 2011-05-05 11:08:54

+0

請注意, instanceof「check也是API,因爲規範指出bundle的類加載器必須實現BundleReference。 – 2014-07-16 02:29:00

10

將Bundle-Activator添加到您的MANIFEST.MF。如果它被實例化,那麼你的JAR運行在OSGi容器中。

+1

在這裏增加票數。有人可以解釋爲什麼新手? – Chris 2011-06-01 18:52:17

+1

這是一個簡單的解決方案。在OSGi 4.2之前,沒有一種方便的方法來反省類加載器來確定它作爲一個包的狀態(PackageAdmin.getBundle是唯一的方法)。 – 2011-06-01 19:33:21

+0

謝謝。那個括號內的評論是我認爲我需要的(可操作的)細節。 – Chris 2011-06-01 20:02:18

1

您可以檢查「this.getClass()。getClassLoader()instanceof org.osgi.framework.BundleReference」,如果您在R4.2 OSGi框架中運行,只應該是true。

+0

我正在使用eclipse安裝中的測試,並將org.eclipse.osgi作爲類加載程序包的開始。我決定檢查非osgi情況下類加載器的名稱是什麼(com.sun ....我忘記了,現在我在家裏),這使我的測試可以在其他OSGI實現中開放,儘管它受到其他非osgi類加載器實現的使用,並將扳手投入工作。 – Chris 2011-06-02 00:13:33

相關問題