Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ApacheFelix主机公开依赖项OSGi_Java_Osgi_Apache Felix_Embedded Osgi - Fatal编程技术网

Java ApacheFelix主机公开依赖项OSGi

Java ApacheFelix主机公开依赖项OSGi,java,osgi,apache-felix,embedded-osgi,Java,Osgi,Apache Felix,Embedded Osgi,我正在使用ApacheFelix创建一个嵌入式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.

我正在使用ApacheFelix创建一个嵌入式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("]", ""));
List extra=new ArrayList();
额外添加(“some.example.packag.to.expose.1”);
额外添加(“some.example.packag.to.expose.2”);
额外添加(“some.example.packag.to.expose.3”);
config.put(Constants.FRAMEWORK\u SYSTEMPACKAGES\u EXTRA,EXTRA.toString().replace(“[”,”).replace(“[”,”);
一切都很好,这些包都暴露出来了。但是,我需要bundle访问宿主项目声明的依赖项。例如,父应用程序声明了Jackson、Apache(各种)等,我需要这些包来访问它们

我尝试显式地添加包,但当它们是依赖项时,这似乎不起作用。例如,在bundle中,我想使用Jacksons
com.fasterxml.jackson.core.type.TypeReference
所以我在上面的额外列表中添加了
com.fasterxml.jackson.core.type
,但它似乎并没有解决问题,包仍然没有公开


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

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

Ok,所以听起来似乎没有内置的机制来批量导出依赖项。工作还没有结束,我很高兴找到一个解决方案来列出要公开的依赖项包。但是,当您说“配置每个包”时,您的意思是什么。正如我在问题中所解释的,在额外列表中声明依赖项似乎不起作用。如果您像您所展示的那样导出该包,那么它应该在OSGi中可用。你怎么看它不工作?如果有一个内置的机制从基础应用程序批量导出包。。。它应该停在哪里?它是否应该从应用程序类路径导出所有内容?扩展类加载器和引导类加载器如何?那么JRE中所有的
com.sun
sun.misc
呢?在标准Java程序中,没有定义的方法来枚举作为“应用程序”一部分的所有包,而不是那些属于JavaSE规范一部分的包,以及恰好运行的JVM中的非标准包。这就是为什么您必须自己指定包的原因。