gpt4 book ai didi

osgi - 如何在不安装/激活的情况下发现 OSGi 包导出的类型?

转载 作者:行者123 更新时间:2023-12-05 00:58:13 24 4
gpt4 key购买 nike

基本上我想发现一个 jar 是否实现了任意数量的接口(interface)而不激活或启动包。是否可以像容器一样从 API 的元信息中读取元数据,但无需激活 bundle ?

我想使用 OSGi 来支持将发布大量接口(interface)的插件,并且我想知道当用户上传而不激活 bundle 时, bundle 实现了哪些接口(interface)等。

最佳答案

我认为不可能发现一个 bundle 将提供什么服务,因为这可能发生在 Java 代码内部,没有任何关于它的元数据。当然,如果你使用 Declarative Services,还有一个元数据文件。此外,bundle 需要导入(或提供)服务接口(interface),这可能会给您提示(但不会更多)。

您可以在不激活它的情况下检查 bundle 导入和导出的 Java 包。如果你愿意安装(不是解析,不是激活)它,你可以查询它。毕竟 Felix 或 Equinox shell 可以列出这些包。

这是 relevant source from Felix' shell .它使用 PackageAdmin 服务:

 public void execute(String s, PrintStream out, PrintStream err)
{
// Get package admin service.
ServiceReference ref = m_context.getServiceReference(
org.osgi.service.packageadmin.PackageAdmin.class.getName());
PackageAdmin pa = (ref == null) ? null :
(PackageAdmin) m_context.getService(ref);

// ...

Bundle bundle = m_context.getBundle( bundleId );
ExportedPackage[] exports = pa.getExportedPackages(bundle);

// ...
}

关于osgi - 如何在不安装/激活的情况下发现 OSGi 包导出的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/785588/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com