我在本教程之后遇到了一些问题(本来应该很容易):
http://www.javaworld.com/article/2077837/java-se/hello--osgi--part-1--bundles-for-beginners.html
起初问题是我找不到的大量错误(但是尽管有错误,程序的输出是正确的)。我读到了这个问题:
当有人试图使用java -classpath ....对OSGi包运行Java应用程序时,通常会出现这种情况。这实际上意味着工作台插件尚未启动,因此对getWorkbench()的调用失败。这本质上是一种竞争条件,可以通过表达对该捆绑包的显式依赖关系或将该捆绑包提升到比工作台更高的启动级别来解决。通常看不到,但如果是,那就是发生了什么。
我不理解作者提出的第一个解决方案,但我尝试了第二个解决方案失败了。然后我到达了教程的第5页(也是最后一页),一切都变得最糟糕。我尝试按照作者的建议创建服务工厂,我得到的输出不准确。他说:
现在尝试运行此示例代码。你应该注意到它打印出来了 当HelloWorld包启动时,服务使用计数为一(1) 当HelloWorld包停止时为零(0)。
但我只获得了第一个输出(使用计数器打印为1),没有别的。谷歌搜索时,我找到了第一个问题的可能解决方案,我认为它也可以解决第二个问题:
我为“Workbench尚未创建”而苦苦挣扎 完整的一天。但我通过以下步骤得到了解决方案。去吧 运行配置 - >删除所有目标平台jar。点击添加 必需的捆绑。检查org.apache.felix.gogo.runtime, org.apache.felix.gogo.shell,org.eclipse.eqinox.console, org.eclipse.osgi和你的jar文件。最后也是重要的一步。去 设置 - >选中“清除配置区域”复选框 启动“。现在运行OSGi应用程序。
享受它是否适合你,因为它对我有用。
“删除所有目标平台jar”是否意味着我应该取消选中Run Configurations中Bundles选项卡中的所有bundle?这就是我所做的,而且情况变得更糟。通过这样做,我没有得到任何输出和一些错误(不像以前那样一堆),我在下面打印。
!ENTRY org.eclipse.osgi 4 0 2014-02-03 14:50:46.399!MESSAGE Bundle 参考:文件:C:/Users/User/workspace/com.javaworld.sample.helloservice@5未找到。
!ENTRY org.eclipse.osgi 2 0 2014-02-03 14:50:46.473!MESSAGE One或 由于以下根约束,因此未解析更多捆绑包 未解决:!SUBENTRY 1 org.eclipse.osgi 2 0 2014-02-03 14:50:46.474!MESSAGE Bundle 初始@参考:文件:../../../工作区/ com.javaworld.sample.helloworld / 没有解决。 !SUBENTRY 2 com.javaworld.sample.helloworld 2 0 2014-02-03 14:50:46.474!MESSAGE缺少进口包装 com.javaworld.sample.service_0.0.0。
!ENTRY org.eclipse.osgi 2 0 2014-02-03 14:50:46.475!MESSAGE 以下是未解析的捆绑包的完整列表,请参阅 如果存在,则为根本原因的先前日志条目:!SUBENTRY 1 org.eclipse.osgi 2 0 2014-02-03 14:50:46.475!MESSAGE Bundle com.javaworld.sample.helloworld_1.0.0.qualifier [2]未解决。 !SUBENTRY 2 com.javaworld.sample.helloworld 2 0 2014-02-03 14:50:46.475!MESSAGE缺少进口包装 com.javaworld.sample.service_0.0.0。
好吧,我认为只要再次选择一切(我认为这就是以前的样子)我会重新开始做生意,但现在我根本没有输出。关于我做错了什么的任何想法?
答案 0 :(得分:2)
“删除所有目标平台罐”是否意味着我应该这样做 取消选中“运行配置”中“分发包”选项卡中的所有分发包? 这就是我所做的,而且情况变得更糟。通过这样做,我得到了 没有输出和一些错误(不是像以前一样的一堆),我 打印在下面。
当您打开OSGI配置(Bundles选项卡)时,您可以包含/排除bundle a)工作区 b)目标平台
“删除所有目标平台jar”意味着取消选中Target Platform节点。
我相信作者的想法是(没有读过这篇文章)你做了以下事情 1)检查Workspace包 - 检查是否包含所有必需的包 2)取消选中Target平台捆绑包 3)单击按钮添加所需的包
使用步骤1),您可以包含所有的捆绑包。步骤2)和3)包括所有必需的包。
如果你想使用控制台,请确保 -consoleLog -console出现在Arguments选项卡上(在Program参数下),并且包含org.apache.felix.gogo.runtime,org.apache.felix.gogo.shell,org.eclipse.eqinox.console。