Плагин Eclipse: NoClassDefFoundError для org / eclipse / jdt / ui / JavaUI - PullRequest
3 голосов
/ 02 октября 2009

Я создаю плагин, который требует класс jdt.ui.JavaUI. Я включил плагин jdt.ui в зависимости. Это мой манифест.МФ:

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

Есть идеи, почему это происходит?

Ответы [ 4 ]

2 голосов
/ 14 ноября 2009

Порядок плагинов в "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 загружает классы из пакетов в указанном вами порядке. Это может вызвать проблемы, если порядок не от «базового» до «неосновного». Попробуйте, это может помочь.

0 голосов
/ 04 ноября 2013

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

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

  1. Скопируйте экспортированный jar в папку dropins (не plugins). Плагин будет установлен при следующем запуске eclipse.
  2. Экспорт и установка на работающий хост
  3. Создайте проект Feature , сайт обновлений и установите плагин с помощью меню опций Install New Software.
0 голосов
/ 19 декабря 2009

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

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

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

0 голосов
/ 03 октября 2009

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

...