【问题标题】:Getting started with OGSiOGSi 入门
【发布时间】:2014-02-27 01:41:26
【问题描述】:

我在学习本教程时遇到了一些问题(这应该很容易):

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),没有别的。在谷歌搜索时,我发现了第一个问题的可能解决方案,我认为它也可以解决第二个问题:

我为“尚未创建工作台”而苦苦挣扎 完整的一天。但我通过以下步骤得到了解决方案。前往 运行配置 -> 删除所有目标平台 jar。点击添加 所需的捆绑包。检查 org.apache.felix.gogo.runtime, org.apache.felix.gogo.shell, org.eclipse.eqinox.console, org.eclipse.osgi 和你的 jar 文件。最后也是重要的一步。去 设置->勾选“清除配置区域之前 启动”。现在运行 OSGi 应用程序。

享受它是否对你有用,因为它对我有用。

“删除所有目标平台 jars”是否意味着我应该取消选中“运行配置”中“捆绑包”选项卡中的所有捆绑包?我就是这么做的,而且情况变得更糟了。通过这样做,我没有得到任何输出和一些错误(不是一堆,像以前一样),我在下面打印。

!ENTRY org.eclipse.osgi 4 0 2014-02-03 14:50:46.399 !MESSAGE 包 参考:文件:C:/Users/User/workspace/com.javaworld.sample.helloservice@5 未找到。

!ENTRY org.eclipse.osgi 2 0 2014-02-03 14:50:46.473 !MESSAGE 一个或 由于以下根约束,更多捆绑包未解决 未解决:!SUBENTRY 1 org.eclipse.osgi 2 0 2014-02-03 14:50:46.474 !消息包 初始@参考:文件:../../../workspace/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 !消息包 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.

好的,我以为只要再次选择所有内容(我认为这是以前的方式),我就会重新开始工作,但现在我根本没有得到任何输出。知道我做错了什么吗?

【问题讨论】:

  • 哪个版本的eclipse?我记得最初在 4.2 中遇到过类似的问题。
  • 您可能还对我的 OSGi 系列教程感兴趣。我的做法完全不同。我展示了如何将包创建为常规的 Maven 项目。不需要插件透视图。 liquid-reality.de/display/liquid/Karaf+Tutorials
  • 只是想说,使用 OSGi 包真的没有那么难,你遇到的是 Eclipse 的诡计。 Eclipse 有自己的共享问题和特定于版本的解决方法,我个人建议从一个更简单的容器开始,它不会像 Eclipse 那样尝试做太多事情。
  • 感谢您的帮助!我的 Eclipse 版本是这样的: 版本:Kepler Service Release 1 Build id: 20130919-0819 我找不到进一步指定版本的方法...

标签: java eclipse osgi osgi-bundle


【解决方案1】:

“删除所有目标平台 jar”是否意味着我应该 取消选中 Run Configurations 的 Bundles 选项卡中的所有捆绑包? 我就是这么做的,而且情况变得更糟了。通过这样做,我得到了 没有输出和一些错误(不是一堆,像以前一样),我 在下面打印。

当您打开 OSGI 配置(Bundles 选项卡)时,您可以从其中包含/排除捆绑包 a) 工作区 b) 目标平台

“删除所有目标平台jar”表示取消选中目标平台节点。

我相信作者的想法是(尚未阅读文章)您执行以下操作 1) 检查工作区捆绑包 - 检查是否包含所有必要的捆绑包 2)取消选中目标平台捆绑包 3)单击按钮添加所需的捆绑包

在步骤 1) 中,您包含所有捆绑包。在步骤 2) 和 3) 中包含所有必需的捆绑包。

如果您想使用控制台,请确保 -consoleLog -console 出现在 Arguments 选项卡上(在 Program arguments 下),并且您已包含 org.apache.felix.gogo.runtime、org.apache.felix.gogo.shell、org.eclipse.eqinox.console。

【讨论】:

    猜你喜欢
    • 2012-11-15
    • 2010-09-21
    • 1970-01-01
    • 1970-01-01
    • 2011-06-26
    • 2013-05-06
    • 2018-10-21
    • 2011-08-20
    • 2010-11-06
    相关资源
    最近更新 更多