如果一个bundle的依赖项不能解析,它应该是处于INSTALLED状态,那么如何找到它呢?我试过了
Bundle bundle = Platform.getBundle( symbolicName ) ;
但是bundle为空。
bundle
ffx8fchx1#
从内部来看Platform.getBundle,它使用FrameworkWiring进行搜索,但只在INSTALLED(或UNINSTALLED)中过滤掉bundle。这是该代码的改编版本,未进行过滤:
Platform.getBundle
FrameworkWiring
String symbolicName = // Bundle to find FrameworkWiring wiring = Platform.getBundle(org.osgi.framework.Constants.SYSTEM_BUNDLE_SYMBOLICNAME).adapt(FrameworkWiring.class); String filter = '(' + IdentityNamespace.IDENTITY_NAMESPACE + '=' + symbolicName + ')'; Map<String, String> directives = Map.of(Namespace.REQUIREMENT_FILTER_DIRECTIVE, filter); Collection<BundleCapability> matching = wiring.findProviders(ModuleContainer.createRequirement(IdentityNamespace.IDENTITY_NAMESPACE, directives, Collections.emptyMap()));
如果存在多个版本,则可能存在多个匹配项。使用BundleCapability调用getRevision().getBundle()以获取捆绑包。
BundleCapability
getRevision().getBundle()
1条答案
按热度按时间ffx8fchx1#
从内部来看
Platform.getBundle
,它使用FrameworkWiring
进行搜索,但只在INSTALLED(或UNINSTALLED)中过滤掉bundle。这是该代码的改编版本,未进行过滤:
如果存在多个版本,则可能存在多个匹配项。
使用
BundleCapability
调用getRevision().getBundle()
以获取捆绑包。