5

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

4

3 回答 3

9

最好的办法:

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

于 2012-07-25T21:47:17.423 回答
4

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

于 2012-07-25T17:30:31.263 回答
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服务似乎已被弃用,应该由org.osgi.framework.wiring包替换。

于 2013-04-04T14:43:06.327 回答