启动OSGi包

时间:2010-08-10 09:06:07

标签: java osgi bundle equinox

我尝试在Eclipse中运行OSGi插件。它是空捆绑,但是eclipse总是给我发错误 有我的控制台消息 http://pastebin.com/dqQfpQhd 有什么问题?

6 个答案:

答案 0 :(得分:6)

问题是默认目标包含许多与您的包无关的包 - 在所有错误消息完成后键入命令ss将列出它们。

这是你做的:

  1. 在Eclipse中,转到首选项>插件开发>目标平台
  2. 创建新的空目标定义
  3. 在“位置”选项卡中,添加一个只包含Equinox包的目录(可以从Eclipse安装的plugins目录中复制,该jar的名称类似于org.eclipse.osgi_3.7.0.v20110613.jar)< / LI>
  4. 确保新目标处于有效状态并尝试再次运行捆绑包

答案 1 :(得分:5)

我很努力“Workbench还没有创建”整整一天。

但我通过以下步骤获得了解决方案 .-

  1. 转到运行配置 - &gt;删除所有目标平台罐。
  2. 点击添加必需的包。
  3. 检查org.apache.felix.gogo.runtime,org.apache.felix.gogo.shell,org.eclipse.eqinox.console,org.eclipse.osgi和您的jar文件。
  4. 最后也是重要的一步。转到设置 - &gt; 检查 “启动之前清除配置区域”复选框。
  5. 立即运行OSGi应用程序。
  6. 如果它对你有用,那就享受吧。
  7. 由于

答案 2 :(得分:3)

这是主要问题:

  

java.lang.IllegalStateException:尚未创建Workbench。

当您尚未创建工作台本身时,您正在使用工作台中的方法/对象或与工作台相关的方法/对象。也许你可以延迟激活bundle或从bundle的激活/初始化部分中删除'workbench'依赖。


哎呀,回到开头。日志的最后一行包含“Hello World” - 这是您的捆绑包的预期输出吗?也许不是你的捆绑导致输出上的错误和警告。我也看到了一些'mylin'和其他东西。如果可能,请在系统中添加另一个干净的eclipse安装(无其他软件包/插件),并在该环境中尝试使用该软件包。


来自good article on eclipsezone

  

当有人试图使用java -classpath ....对OSGi包运行Java应用程序时,通常会出现这种情况。这实际上意味着工作台插件尚未启动,因此对getWorkbench()的调用失败。这本质上是一种竞争条件,可以通过表达对该捆绑包的显式依赖关系或将该捆绑包提升到higher start level而不是工作台来解决。通常看不到,但如果是,那就是发生了什么。

你自己的捆绑包的超类是什么?因为这可能会引入对工作台的依赖。

并且 - 如何从eclipse中启动捆绑包,或者你将它装罐并将其放入eclipse插件文件夹中?这也可能有所不同。

答案 3 :(得分:2)

这些错误都与您的捆绑无关。正如您从“Hello World”输出中看到的那样,您的捆绑包正好开始。

我相信你是以错误的方式启动Eclipse,可能急切地激活所有捆绑包。 Eclipse需要以“延迟激活”模式启动大多数工作台捆绑包。

  1. 请说明如何启动Eclipse。您是否已将-console添加到eclipse.ini文件中?
  2. 如果您不尝试使用自己的捆绑包,是否会出现此问题?
  3. 您如何安装和激活自己的捆绑包?
  4. 请粘贴以下文件:
    • 您自己的捆绑包中的MANIFEST.MF
    • 来自config.ini
    • ECLIPSE_HOME/configuration 来自eclipse.ini
    • ECLIPSE_HOME

答案 4 :(得分:0)

首先检查空插件的依赖项。可能是你缺少添加一个插件,在运行时没有加载。

如果你的插件中有依赖项,请检查使用插件的版本。

您在插件中定义了哪个Java版本?它是否比您在运行时使用的版本更高?

你的插件加载DLL了吗?如果是,请检查是否可以在运行时找到DLL。

修改

  

#   Workbench尚未创建。   #           在org.eclipse.ui.PlatformUI.getWorkbench(PlatformUI.java:92)   #           在org.eclipse.mylyn.internal.monitor.ui.MonitorUiPlugin.start(MonitorUiPlugin.java:145)

您在Activator的start方法中定义了什么? 它是sems,你正在使用尚未创建的工作台。

答案 5 :(得分:0)

在运行捆绑包之前尝试执行此操作:

if(!PlatformUI.isWorkbenchRunning()) {
    PlatformUI.createAndRunWorkbench(PlatformUI.createDisplay(), new WorkbenchAdvisor() {...}); 
}