我尝试在 Eclipse 中运行 OSGi 插件。它是空包,但 eclipse 总是给我发送错误有我的控制台消息 http://pastebin.com/dqQfpQhd有 什么问题?
6 回答
问题是默认目标包含许多与您的包无关的包——ss
在所有错误消息完成后键入命令将列出它们。
这是你要做的:
- 在 Eclipse 中,转到首选项 > 插件开发 > 目标平台
- 创建一个新的空目标定义
- 在 Locations 选项卡中,添加一个只包含 Equinox 包的目录(您可以从 Eclipse 安装的插件目录中复制它,该 jar 的名称类似于 org.eclipse.osgi_3.7.0.v20110613.jar)
- 确保新目标处于活动状态并尝试再次运行您的包
这是主要问题:
java.lang.IllegalStateException:工作台尚未创建。
您正在使用工作台中的方法/对象或与工作台相关的方法/对象,而工作台本身尚未创建。也许您可以延迟捆绑包的激活或从捆绑包的激活/初始化部分删除“工作台”依赖项。
咳咳,回到开头。日志的最后一行包含一个“Hello World”——这是你的包的预期输出吗?也许不是您的捆绑包导致输出出现错误和警告。我也看到了一些“mylin”和其他东西。如果可能,将另一个干净的 eclipse 安装(没有额外的包/插件)添加到您的系统并在该环境中尝试该包。
这通常发生在有人尝试使用 java -classpath .... 对 OSGi 包运行 Java 应用程序时。这实际上意味着工作台插件尚未启动,因此对 getWorkbench() 的调用失败。这本质上是一种竞争条件,可以通过表达对该捆绑包的显式依赖关系或将该捆绑包提升到比工作台更高的起始级别来解决。通常看不到,但如果是,那就是正在发生的事情。
你自己的捆绑包的超类是什么?因为这可能会引入对工作台的依赖。
并且 - 如何从 Eclipse 中“启动”捆绑包,或者将其打包并将其放入 Eclipse 插件文件夹中?这也可以有所作为。
这些错误都与您的捆绑包无关。正如您从“Hello World”输出中看到的那样,您的包开始正常。
我相信您以错误的方式启动 Eclipse,可能急切地激活了所有捆绑包。Eclipse 需要以“延迟激活”模式启动大多数工作台捆绑包。
- 请指定如何启动 Eclipse。你添加
-console
到eclipse.ini
文件中了吗? - 当您不尝试使用自己的捆绑软件时,是否会出现此问题?
- 您如何安装和激活自己的捆绑包?
- 请粘贴以下文件:
- 来自
MANIFEST.MF
您自己的捆绑包 config.ini
从ECLIPSE_HOME/configuration
eclipse.ini
从ECLIPSE_HOME
- 来自
在运行你的包之前尝试这样做:
if(!PlatformUI.isWorkbenchRunning()) {
PlatformUI.createAndRunWorkbench(PlatformUI.createDisplay(), new WorkbenchAdvisor() {...});
}
首先检查空插件的依赖关系。可能是您缺少添加插件,在运行时未加载该插件。
如果您的插件中有依赖项,请检查所使用的插件版本。
您在插件中定义了哪个 Java 版本?它是否比您在运行时使用的版本更高?
您的插件是否加载 DLL?如果是,请检查是否可以在运行时找到 DLL。
编辑:
# 工作台尚未创建。# 在 org.eclipse.ui.PlatformUI.getWorkbench(PlatformUI.java:92) # 在 org.eclipse.mylyn.internal.monitor.ui.MonitorUiPlugin.start(MonitorUiPlugin.java:145)
你在 Activator 的 start 方法中定义了什么?看来,您正在使用尚未创建的工作台。