eclipse 如何找到处于已安装状态的软件包?

4xy9mtcn  于 2023-01-02  发布在  Eclipse
关注(0)|答案(1)|浏览(190)

如果一个bundle的依赖项不能解析,它应该是处于INSTALLED状态,那么如何找到它呢?
我试过了

Bundle bundle = Platform.getBundle( symbolicName ) ;

但是bundle为空。

ffx8fchx

ffx8fchx1#

从内部来看Platform.getBundle,它使用FrameworkWiring进行搜索,但只在INSTALLED(或UNINSTALLED)中过滤掉bundle。
这是该代码的改编版本,未进行过滤:

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()以获取捆绑包。

相关问题