2009-10-02 2 views
3

Я создаю плагин, который требует класс jdt.ui.JavaUI. Я включил плагин jdt.ui в зависимости. Это мой Manifest.mf:Плагин Eclipse: NoClassDefFoundError на org/eclipse/jdt/ui/JavaUI

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

Как было предложено Стивом, не могли бы вы дать более подробную информацию о том, как вы «устанавливаете» подключаемый модуль (версия Eclipse используется для разработки подключаемого модуля, версии Eclipse, где установлен подключаемый модуль, экспортировать подключаемый модуль, процедуру, используемую для установки подключаемого модуля и т. д.). Проблема, вероятно, возникает на этапе экспорта/установки, потому что подключаемый модуль работает при запуске нового экземпляра Eclipse из вашей рабочей области. – Barthelemy

ответ

0

Единственное, о чем я могу думать, это, возможно, вы компилируете против разных версий, чем вы работаете, и существуют не-двоичные совместимые изменения. Вы можете увидеть что-то подобное в eclipse bug 177476, где это произошло.

2

Порядок плагинов в «Требовании-Связка» важен! Вы должны заказать их таким образом, чтобы первые были первыми.

Я хотел бы предложить:

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 

Это происходит потому, что затмение загружает классы из пучков в порядке вы предусмотрели. Это может вызвать проблемы, если заказ не от «основного» до «не-базового». Попробуйте это, это может помочь.

0

В какой версии Eclipse вы пытаетесь это сделать? Если вы используете 3.4 (Ganymede) или 3.5 (Galileo), вы больше не можете добавлять новые плагины в папку плагинов. Попробуйте поместить ваш плагин в папку dropins (это намерение папки dropins).

Когда ваш плагин готов к более постоянному развертыванию, вы можете экспортировать его с помощью метаданных P2 и использовать диспетчер обновлений, чтобы запустить его.

Если вы используете старую версию Eclipse, файл .log, вероятно, предоставит вам некоторые сведения о плагине.

0

Да, если вы экспортируете плагин в банку и просто скопируете его на плагины папка вашей установки затмения Некоторые зависимости не будут работать (включая org.eclipse.jdt.ui). На самом деле, я считаю, что только пакеты внутри org.eclipse.core будут работать правильно, если вы будете распространять свой плагин таким образом.

Чтобы действительно установить плагин, вам нужно выполнить одно из следующих действий:

  1. Копировать экспортироваться банку в dropins (не плагинов) папку. Плагин будет установлен при следующем запуске eclipse.
  2. Export and Install into the Running Host
  3. Создать feature проект, в update site и установить плагин через меню установки параметров нового программного обеспечения.
Смежные вопросы