【问题标题】:Starting OSGi bundle启动 OSGi 包
【发布时间】:2011-03-27 17:17:25
【问题描述】:

我尝试在 Eclipse 中运行 OSGi 插件。它是空包,但 Eclipse 总是向我发送错误 有我的控制台消息 http://pastebin.com/dqQfpQhd 怎么了?

【问题讨论】:

    标签: java osgi bundle equinox


    【解决方案1】:

    首先检查空插件的依赖关系。可能是您缺少添加插件,但在运行时未加载。

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

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

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

    编辑:

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

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

    【讨论】:

    • 绝对是空插件
    【解决方案2】:

    这是主要问题:

    java.lang.IllegalStateException: 工作台尚未创建。

    您正在使用工作台中的方法/对象或与工作台相关的方法/对象,而工作台本身尚未创建。也许您可以延迟捆绑包的激活或从捆绑包的激活/初始化部分删除“工作台”依赖项。


    哎呀,回到开头。日志的最后一行包含一个“Hello World”——这是你的包的预期输出吗?也许不是您的捆绑包导致输出出现错误和警告。我也看到了一些“mylin”和其他东西。如果可能的话,向您的系统添加另一个全新安装的 eclipse(没有额外的包/插件)并在该环境中尝试该包。


    来自good article on eclipsezone

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

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

    而且 - 如何从 Eclipse 中“启动”捆绑包,或者将其打包并放入 Eclipse 插件文件夹中?这也可能有所作为。

    【讨论】:

    • 是的,'Hello World 它是我的 byndle 的输出。我下载了新的 Eclipse - 这是同样的错误 :(
    【解决方案3】:

    在运行你的包之前尝试这样做:

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

    【讨论】:

      【解决方案4】:

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

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

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

      【讨论】:

        【解决方案5】:

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

        这就是你要做的:

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

        【讨论】:

          【解决方案6】:

          我为“尚未创建工作台”整整一天而奋斗了很多。

          但我通过以下步骤得到了解决方案。-

          1. 转到运行配置 -> 删除所有目标平台jar。
          2. 单击添加所需的捆绑包。
          3. 检查 org.apache.felix.gogo.runtime、org.apache.felix.gogo.shell、org.eclipse.eqinox.console、org.eclipse.osgi 和您的 jar 文件。
          4. 最后也是重要的一步。进入设置-勾选“启动前清除配置区域”复选框。
          5. 立即运行 OSGi 应用程序。
          6. 享受它是否对你有用,因为它对我有用。

          谢谢

          【讨论】:

          • “添加所需的捆绑包”在哪里?
          猜你喜欢
          • 1970-01-01
          • 2013-06-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-04-22
          • 2017-06-18
          • 1970-01-01
          • 2016-06-06
          相关资源
          最近更新 更多