【问题标题】:Why does my Eclipse plugin startup fine in one workspace, but not in another?为什么我的 Eclipse 插件在一个工作区启动正常,而在另一个工作区却不行?
【发布时间】:2011-03-09 12:47:02
【问题描述】:

我为 Eclipse 创建了一个插件并将其导出为 JAR 文件。我把它放在我的 Eclipse RCP 发行版的插件目录中。然后我按预期打开 Eclipse 和插件功能。我转到我的另一台计算机并将 JAR 放在 Eclipse RCP 分发的插件目录中,然后打开 Eclipse。

我在错误日志中收到如下消息:

  • 启动插件时遇到的问题:“org.osgi.framework.BundleException: Exception in myplugin.Activator.start() of bundle MyPlugin”
  • 无法为扩展执行早期启动代码
  • 扩展规范错误
  • 启动类必须实现 org.eclipse.ui.IStartup

其中一些消息让我感到困惑,因为这是我的 Activator 类的样子:

public class Activator extends AbstractUIPlugin implements IStartup {...

例如,它清楚地实现了 IStartup。

有没有人知道这里发生了什么,或者至少我应该朝哪个方向去解决这个问题?

编辑

我现在创建了一个名为 StartupClass.java 的新类:

package myplugin;

import org.eclipse.ui.IStartup;

public class StartupClass implements IStartup {

@Override
public void earlyStartup() 
{

}
}

然后我将我的 plugin.xml 更改为如下所示:

<extension point="org.eclipse.ui.startup">
<startup class="myplugin.StartupClass" />
</extension>

这会导致类似的错误,例如:

  • 自动激活捆绑包 MyPlugin 时出错
  • 插件 MyPlugin 无法加载类 myplugin.StartupClass
  • 无法为扩展执行早期启动代码

【问题讨论】:

  • 那么,通过这些更改,您是否会遇到与以前相同的错误?
  • 是的,我遇到的错误几乎和以前一样。
  • 您的新错误看起来不同。特别是,您得到“插件 MyPlugin 无法加载类 myplugin.StartupClass”。您是否在 StartupClass 类中包含了 package myplugin; 行?
  • @zerocrates 是的,包参考在那里,当我把它拖到这里时,我一定没有复制它。
  • @Treebranch 作为记录,John Flatness 的回答确实对我有用。你必须小心你放在启动类中的代码。例如,其中的代码永远不会在显示线程中运行,因此Display.getCurrent() 返回 null。

标签: java eclipse eclipse-plugin


【解决方案1】:

您在一个工作区中是否有 org.eclipse.runtime.compatibilty 插件,但在另一个工作区中没有?

你这样做的方式已被弃用,你应该有一个单独的“启动”类,并将其指定为 &lt;startup&gt; 元素的 class 属性。

来自Eclipse docs on the startup extension point:

不要将插件类指定为 类属性的值,或 它将被实例化两次(一次由 定期插件激活,一次 通过这种机制)。 如果扩展不提供 类作为启动时的属性 element,插件的激活器 (插件类)必须实现 org.eclipse.ui.IStartup.

请注意 此表格已弃用,不应 不再使用。它的功能依赖于 关于可用性 org.eclipse.core.runtime.compatibility 插件和 org.eclipse.core.runtime.compatibility.registry 片段。

【讨论】:

  • 所以你是说Activator不应该实现IStartup,而是我应该创建另一个实现IStartup的类?
  • 是的,然后修改 plugin.xml 中的扩展声明以引用其他类(而不是完全省略 class 属性,我假设你现在正在这样做)。
猜你喜欢
  • 1970-01-01
  • 2014-05-25
  • 2012-06-13
  • 1970-01-01
  • 1970-01-01
  • 2014-03-03
  • 2013-10-19
  • 2015-09-03
  • 1970-01-01
相关资源
最近更新 更多