2015-11-01 27 views
0

我正在使用Apache Felix创建嵌入式OSGi主机应用程序。我正在使用以下代码来公开我想要公开的软件包: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列表中,但它似乎没有解决问题,该包仍然没有公开。

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

回答

0

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

+0

好的,所以听起来好像没有内置机制来大量导出依赖关系。不是工作的结束,我很高兴找到解决方案来列出要公开的依赖包。但是当你说“配置每个软件包”时,你的意思是什么。正如我在问题中解释的那样,在EXTRA列表中声明依赖关系似乎不起作用。 – tarka

+0

如果您像显示的那样将其导出,应该可以在OSGi中使用该软件包。你如何看待它不起作用? –

+0

如果有一个内置的机制来从基础应用程序批量导出软件包,它应该停止在哪里?是否应该从应用程序类路径中绝对导出所有内容?扩展类加载器和引导类加载器如何?那么JRE中所有'com.sun'和'sun.misc'的东西呢?在一个标准的Java程序中,没有定义的方法来枚举属于“应用程序”的所有程序包,而不是那些属于Java SE规范的程序包,并且它们是您正在运行的JVM中的非标准程序包。这就是你必须自己指定软件包的原因。 –