在 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 有啥区别