使用OSGi API,如何确定给定的b​​undle是否是片段?

时间:2012-07-25 17:29:05

标签: osgi bundle osgi-fragment

在OSGi API中,对BundleContext.getBundles()的调用将返回所有包,无论它们是否为片段。对于给定的Bundle对象,判断这是否为片段的最佳方法是什么?

3 个答案:

答案 0 :(得分:9)

最佳方式:

(bundle.adapt(BundleRevision.class).getTypes() & BundleRevision.TYPE_FRAGMENT) != 0

答案 1 :(得分:4)

一种可能的方法:使用Bundle.getHeaders()查找Fragment-Host标头。如果它存在,它就是一个片段。

答案 2 :(得分:1)

根据OSGi核心规范第4版4.2版,还有PackageAdmin服务,可以访问有关包的结构信息,例如:确定给定的包是否是片段。

import org.osgi.framework.Bundle;
import org.osgi.service.packageadmin.PackageAdmin;

PackageAdmin packageAdmin = ...; // I assume you know this

Bundle hostBundle = ...;         // I assume you know this
Bundle fragmentBundle = ...;     // I assume you know this

assertFalse(PackageAdmin.BUNDLE_TYPE_FRAGMENT, packageAdmin.getBundleType(hostBundle);
assertEquals(PackageAdmin.BUNDLE_TYPE_FRAGMENT, packageAdmin.getBundleType(fragmentBundle);

显然,在OSGi 4.3中,PackageAdmin服务似乎是deprecated,应该由org.osgi.framework.wiring包替换。