我正在创建一个需要jdt.ui.JavaUI类的插件。我将jdt.ui插件包含在依赖项中。这是我的Manifest.MF:
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: PanelGenerator Plug-in
Bundle-SymbolicName: PanelGeneratorPlugin; singleton:=true
Bundle-Version: 0.1.0
Bundle-Activator: panelgenerator.plugin.Activator
Require-Bundle: org.eclipse.jdt.core,
org.eclipse.ui,
org.eclipse.core.runtime,
org.eclipse.core.resources,
org.eclipse.ui.ide,
org.eclipse.jdt.ui
Eclipse-LazyStart: true
这是我的build.properties:
source.. = src/
output.. = bin/
bin.includes = plugin.xml,\
META-INF/,\
.,\
icons/,\
templates/
在编译时我没有收到任何编译错误。如果我使用Eclipse调试插件(Debug as - > Eclipse Application),它可以正常工作。
然而,当我导出它,然后安装它将其复制到Eclipse插件文件夹,该插件不起作用。一旦使用JavaUI类,就什么都不会发生。错误日志报告:
java.lang.NoClassDefFoundError: org/eclipse/jdt/ui/JavaUI
关于为什么会发生这种情况的任何想法?
答案 0 :(得分:2)
“Require-Bundle”中插件的顺序很重要!你应该以最基本的方式排在首位。
我建议:
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: PanelGenerator Plug-in
Bundle-SymbolicName: PanelGeneratorPlugin; singleton:=true
Bundle-Version: 0.1.0
Bundle-Activator: panelgenerator.plugin.Activator
Require-Bundle: org.eclipse.core.runtime,
org.eclipse.core.resources,
org.eclipse.jdt.core,
org.eclipse.ui,
org.eclipse.ui.ide,
org.eclipse.jdt.ui
Eclipse-LazyStart: true
这是因为eclipse按照您提供的顺序从包中加载类。如果订单不是从“基本”到“非基本”,这可能会造成麻烦。试试这个,它可能会有所帮助。
答案 1 :(得分:0)
我唯一能想到的可能是你正在针对不同的版本进行编译而不是运行,并且存在非二进制兼容的更改。您可以在eclipse bug 177476中看到类似的内容。
答案 2 :(得分:0)
您正在尝试使用哪个版本的Eclipse?如果您使用的是3.4(Ganymede)或3.5(Galileo),则不能再将新插件添加到插件文件夹中。尝试将插件放入dropins文件夹(这是dropins文件夹的意图)。
当您的插件准备好进行更长期的部署时,您可以使用P2元数据导出它并使用更新管理器启动它。
如果您使用的是旧版本的Eclipse,.log文件可能会为您提供有关该插件的一些详细信息。
答案 3 :(得分:0)
是的,如果您将插件导出到jar中并将其复制到eclipse安装的 plugins 文件夹中,则某些依赖项将无效(包括org.eclipse.jdt.ui)。事实上,我相信如果你像这样分发你的插件,只有org.eclipse.core里面的包才能正常工作。
要实际安装插件,您需要执行以下操作之一: