2011-05-04 72 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

相关问题