【问题标题】:Eclipse plugin: NoClassDefFoundError on org/eclipse/jdt/ui/JavaUIEclipse 插件:org/eclipse/jdt/ui/JavaUI 上的 NoClassDefFoundError
【发布时间】:2009-10-02 13:30:17
【问题描述】:

我正在创建一个需要 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(调试为 -> Eclipse 应用程序)调试插件,它工作正常。

但是,当我将其导出,然后将其复制到 Eclipse 插件文件夹中进行安装时,该插件不起作用。只要使用 JavaUI 类,什么都不会发生。错误日志报告如下:

java.lang.NoClassDefFoundError: org/eclipse/jdt/ui/JavaUI

关于为什么会发生这种情况的任何想法?

【问题讨论】:

  • 按照史蒂夫的建议,您能否提供更多有关如何“安装”插件的详细信息(用于开发插件的 Eclipse 版本,安装插件的 Eclipse 版本) ,用于导出插件的程序,用于安装插件的程序等)。该问题可能发生在导出/安装阶段,因为当您从工作区启动新的 Eclipse 实例时,该插件工作。

标签: java eclipse plugins eclipse-jdt


【解决方案1】:

“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 按照您提供的顺序从包中加载类。如果订单不是从“基本”到“非基本”,这可能会导致麻烦。试试这个,它可能会有所帮助。

【讨论】:

    【解决方案2】:

    我唯一能想到的可能是您正在针对不同的版本进行编译,而不是针对您运行的版本,并且存在非二进制兼容的更改。您可以在 eclipse bug 177476 中看到类似的内容。

    【讨论】:

      【解决方案3】:

      您正在使用哪个版本的 Eclipse?如果您使用的是 3.4 (Ganymede) 或 3.5 (Galileo),则不能再将新插件添加到插件文件夹中。尝试将您的插件放入 dropins 文件夹(这是 dropins 文件夹的目的)。

      当您的插件准备好进行更持久的部署时,您可以将其与 P2 元数据一起导出并使用更新管理器来启动它。

      如果您使用的是旧版本的 Eclipse,.log 文件可能会为您提供有关插件的一些详细信息。

      【讨论】:

        【解决方案4】:

        是的,如果您将插件导出到 jar 中并将其复制到 eclipse 安装的 plugins 文件夹中,则某些依赖项将不起作用(包括 org.eclipse.jdt.ui)。事实上,如果你像这样分发你的插件,我相信只有 org.eclipse.core 中的包才能正常工作。

        要实际安装您的插件,您需要执行以下操作之一:

        1. 将导出的 jar 复制到 dropins(不是插件)文件夹中。插件将在您下次启动 eclipse 时安装。
        2. Export and Install into the Running Host
        3. 创建一个feature 项目,一个update site 并通过安装新软件选项菜单安装您的插件。

        【讨论】:

          猜你喜欢
          • 2013-11-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-02-01
          • 2012-06-30
          • 1970-01-01
          相关资源
          最近更新 更多