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列表中,但它似乎没有解决问题,该包仍然没有公开。
在一个完美的工作中,我只想让所有的主机依赖可用,而无需明确说明每个依赖。
好的,所以听起来好像没有内置机制来大量导出依赖关系。不是工作的结束,我很高兴找到解决方案来列出要公开的依赖包。但是当你说“配置每个软件包”时,你的意思是什么。正如我在问题中解释的那样,在EXTRA列表中声明依赖关系似乎不起作用。 – tarka
如果您像显示的那样将其导出,应该可以在OSGi中使用该软件包。你如何看待它不起作用? –
如果有一个内置的机制来从基础应用程序批量导出软件包,它应该停止在哪里?是否应该从应用程序类路径中绝对导出所有内容?扩展类加载器和引导类加载器如何?那么JRE中所有'com.sun'和'sun.misc'的东西呢?在一个标准的Java程序中,没有定义的方法来枚举属于“应用程序”的所有程序包,而不是那些属于Java SE规范的程序包,并且它们是您正在运行的JVM中的非标准程序包。这就是你必须自己指定软件包的原因。 –