【问题标题】:Apache Felix Host expose dependencies OSGiApache Felix Host 暴露依赖 OSGi
【发布时间】:2016-02-01 07:13:46
【问题描述】:

我正在使用 Apache Felix 创建嵌入式 OSGi 主机应用程序。我正在使用以下代码来公开我要公开的包:

List<String> extra = new ArrayList<>();
extra.add("some.example.packag.to.expose.1");
extra.add("some.example.packag.to.expose.2");
extra.add("some.example.packag.to.expose.3");
config.put(Constants.FRAMEWORK_SYSTEMPACKAGES_EXTRA, extra.toString().replace("[","").replace("]", ""));

一切都很好,这些包都暴露了。但是,我需要捆绑包能够访问 ALL 宿主项目声明的依赖项。因此,例如父应用程序声明了 Jackson、Apache(各种)等,我需要捆绑包才能访问这些。

我尝试显式添加软件包,但是当它们是依赖项时,这似乎并没有起到作用。因此,例如在捆绑包中我想使用 Jacksons com.fasterxml.jackson.core.type.TypeReference; 所以我将com.fasterxml.jackson.core.type 添加到上面的 EXTRA 列表中,但它似乎没有解决问题,包仍然没有暴露。

在一项完美的工作中,我只想让所有主机依赖项都可用,而不必明确说明每个依赖项。

【问题讨论】:

    标签: java osgi apache-felix embedded-osgi


    【解决方案1】:

    您必须配置每个包。在 OSGi 中,您通常会将依赖项安装为捆绑包。所以这些设置不支持批量导出系统包。

    【讨论】:

    • 好的,听起来好像没有内置机制来批量导出依赖项。工作还没有结束,我很高兴找到一个解决方案来列出要公开的依赖包。但是,当您说“配置每个软件包”时,您是什么意思。正如我在问题中解释的那样,在 EXTRA 列表中声明依赖项似乎不起作用。
    • 如果您像显示的那样导出它,该包应该在 OSGi 中可用。你怎么看它不起作用?
    • 如果有一个内置机制可以从基础应用程序中大量导出包......它应该在哪里停止?它应该从应用程序类路径中绝对导出所有内容吗?扩展类加载器和引导类加载器怎么样? JRE 中的所有com.sunsun.misc 内容怎么样?在标准的 Java 程序中,没有定义的方法来枚举属于“应用程序”的所有包,而不是那些属于 Java SE 规范的包,以及您碰巧正在运行的 JVM 中的非标准包。这就是为什么你必须自己指定包的原因。
    猜你喜欢
    • 2015-10-05
    • 2019-09-28
    • 2018-05-14
    • 1970-01-01
    • 2017-03-05
    • 2019-08-24
    • 2015-04-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多