为什么我的Eclipse插件在一个工作区中启动良好,而在另一个工作区中却没有?

时间:2011-03-05 22:51:26

标签: java eclipse eclipse-plugin

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

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

  • 启动插件遇到的问题:“org.osgi.framework.BundleException:捆绑MyPlugin的myplugin.Activator.start()中的异常”
  • 无法为扩展程序执行早期启动代码
  • 错误的扩展规范
  • 启动类必须实现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
  • 无法为扩展程序执行早期启动代码

1 个答案:

答案 0 :(得分:1)

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

您不赞成这样做的方式,您应该有一个单独的“启动”类,并将其指定为class元素的<startup>属性。

来自Eclipse docs on the startup extension point

  

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

     

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