在 Apache Felix (v 4.2.1) Gogo shell 上,未打印捆绑包中的 System.out.println

Posted

技术标签:

【中文标题】在 Apache Felix (v 4.2.1) Gogo shell 上,未打印捆绑包中的 System.out.println【英文标题】:On Apache Felix (v 4.2.1) Gogo shell, System.out.println from the bundles is not printed 【发布时间】:2014-03-15 04:45:39 【问题描述】:

免责声明:我是 OSGi 的新手,特别是 Felix。因此,对于我这次犯的任何愚蠢错误,我们深表歉意,但如果您能指出一个错误,我们将不胜感激。

我已经下载了 Apache Felix v4.2.1 并按照http://felix.apache.org/documentation/subprojects/apache-felix-framework/apache-felix-framework-usage-documentation.html 指南中的说明开始运行它

还按照给定的教程开发示例服务侦听器包、字典包和字典客户端(参考:http://felix.apache.org/documentation/tutorials-examples-and-presentations/apache-felix-osgi-tutorial/apache-felix-tutorial-example-1.html)

我能够使用 felix:start 命令在 Felix 中成功安装和启动它们。以下是 felix:lb 命令的输出,

START LEVEL 1
   ID|State      |Level|Name
    0|Active     |    0|System Bundle (4.2.1)
    1|Active     |    1|Apache Felix Bundle Repository (1.6.6)
    2|Active     |    1|Apache Felix Gogo Command (0.12.0)
    3|Active     |    1|Apache Felix Gogo Runtime (0.10.0)
    4|Active     |    1|Apache Felix Gogo Shell (0.10.0)
    5|Active     |    1|file:/home/dev/experiments/osgi/workspace/FirstProj/dist/firstproj.jar (0.0.0)
    6|Active     |    1|file:/home/dev/experiments/osgi/workspace/SecondProj/dist/dictionary.jar (0.0.0)
    7|Active     |    1|file:/home/dev/experiments/osgi/workspace/ThirdProj/dist/dictionary_client.jar (0.0.0)

但是,我的两个包都没有在控制台上输出任何内容,并且第 7 个包 (dicionary_client) 也应该要求输入(使用 System.in),这也不起作用。

这一定是一些小的配置/执行错误,但如果你们能指出我正确的方向,真的很感激。

谢谢。

【问题讨论】:

【参考方案1】:

我发现了问题所在。捆绑包没有正确安装,因为它们对应的 jar 文件没有 META-INF 目录条目。

他们有 META-INF/MANIFEST.MF 但看起来 Felix 在 jar 的目录结构中需要 META-INF 目录(它可能使用 getResource 方法来保持 META-INF 目录的句柄)。

Eclipse 的导出 jar 不会创建这样的条目(即使选择了添加目录选项)。所以我手动构建了罐子,它们正在工作。

【讨论】:

以上是关于在 Apache Felix (v 4.2.1) Gogo shell 上,未打印捆绑包中的 System.out.println的主要内容,如果未能解决你的问题,请参考以下文章

关于eclipse上运行maven项目的错误。java.lang.RuntimeException

m2eclipse Error:ArtifactTransferException: Failure to transfer org.apache.felix:org.apache.felix.res

org.apache.felix.framework-5.6.12源码解析——org.apache.felix.framework文件夹最后的部分

Apache Felix 和 Apache Tomcat 有啥区别

OSGi 容器 - Equinox 与 Apache Karaf 中的 Apache Felix

如何在 apache felix 上实现异步处理?