2014-05-25 1 views
1

Я программирую плагины Eclipse с использованием Kepler SR2. Скажем, я создаю пустой плагин plugin1 и добавьте следующий фиктивный класс:Eclipse-PDE: смешно поведение IDE при расширении AbstractDecoratedTextEditor

package com.example.plugin1; 
import org.eclipse.ui.texteditor.AbstractDecoratedTextEditor; 

public class MyEditor extends AbstractDecoratedTextEditor { 

    public static void main(String[] args) { 
     System.out.println(MyEditor.class); 
    } 
} 

В среде IDE не дает мне естественно исправить подсказку (добавить org.eclipse.ui.editors), я добавить его вручную в зависимости ("Требуется подключи -ins "). Затем начинают происходить смешные вещи. Класс по-прежнему отмечается как наличие ошибок, а также следующие загадочные ошибки появляется:

Тип org.eclipse.jface.text.revisions.RevisionInformation не может быть решена. Это косвенно ссылается на требуемые .class файлы

Я не уверен, что это значит, поэтому я пытаюсь добавить org.eclipse.jface.text к необходимым плагинам. Затем он компилируется без ошибок. Но когда я пытаюсь выполнить мой (Admitedly глупого, но юридический) класса от пусковой установки Eclipse, и странное всплывающее окно с запуска: «Исключение Java произошло», а консоль плюет это StackTrace:

Exception in thread "main" java.lang.NoClassDefFoundError: org/eclipse/ui/actions/WorkspaceModifyOperation 
    at java.lang.Class.getDeclaredMethods0(Native Method) 
    at java.lang.Class.privateGetDeclaredMethods(Unknown Source) 
    at java.lang.Class.getMethod0(Unknown Source) 
    at java.lang.Class.getMethod(Unknown Source) 
    at sun.launcher.LauncherHelper.getMainMethod(Unknown Source) 
    at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source) 
Caused by: java.lang.ClassNotFoundException: org.eclipse.ui.actions.WorkspaceModifyOperation 
    at java.net.URLClassLoader$1.run(Unknown Source) 
    at java.net.URLClassLoader$1.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(Unknown Source) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
    ... 6 more 

Я также пытался загрузить класс во время выполнения с помощью Class.forName (в другом классе)

public static void main(String[] args) throws ClassNotFoundException { 
    System.out.println("trying..."); 
    Class c=Class.forName("com.example.plugin1.MyEditor"); 
    System.out.println("class=" + c); 
} 

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

\eclipse\plugins\org.eclipse.ui_3.105.0.v20130522-1122.jar 
\eclipse\plugins\org.eclipse.swt_3.102.1.v20140206-1334.jar 
\eclipse\plugins\org.eclipse.swt.win32.win32.x86_3.102.1.v20140206-1358.jar 
\eclipse\plugins\org.eclipse.jface_3.9.1.v20130725-1141.jar 
\eclipse\plugins\org.eclipse.core.commands_3.6.100.v20130515-1857.jar 
\eclipse\plugins\org.eclipse.ui.workbench_3.105.2.v20140211-1711.jar 
\eclipse\plugins\org.eclipse.e4.ui.workbench3_0.12.0.v20130515-1857.jar 
\eclipse\plugins\org.eclipse.core.runtime_3.9.100.v20131218-1515.jar 
\eclipse\plugins\javax.annotation_1.1.0.v201209060031.jar 
\eclipse\plugins\javax.inject_1.0.0.v20091030.jar 
\eclipse\plugins\org.eclipse.osgi_3.9.1.v20140110-1610.jar 
\eclipse\plugins\org.eclipse.equinox.common_3.6.200.v20130402-1505.jar 
\eclipse\plugins\org.eclipse.core.jobs_3.5.300.v20130429-1813.jar 
\eclipse\plugins\org.eclipse.core.runtime.compatibility.registry_3.5.200.v20130514-1256\runtime_registry_compatibility.jar 
\eclipse\plugins\org.eclipse.equinox.registry_3.5.301.v20130717-1549.jar 
\eclipse\plugins\org.eclipse.equinox.preferences_3.5.100.v20130422-1538.jar 
\eclipse\plugins\org.eclipse.core.contenttype_3.4.200.v20130326-1255.jar 
\eclipse\plugins\org.eclipse.equinox.app_1.3.100.v20130327-1442.jar 
\eclipse\plugins\org.eclipse.ui.editors_3.8.100.v20130513-1637.jar 
\eclipse\plugins\org.eclipse.core.filebuffers_3.5.300.v20130225-1821.jar 
\eclipse\plugins\org.eclipse.jface.text_3.8.101.v20130802-1147.jar 
\eclipse\plugins\org.eclipse.text_3.5.300.v20130515-1451.jar 
\eclipse\plugins\org.eclipse.ui.ide_3.9.2.v20131004-0923.jar 
\eclipse\plugins\org.eclipse.ui.views_3.6.100.v20130326-1250.jar 
\eclipse\plugins\org.eclipse.ui.workbench.texteditor_3.8.101.v20130729-1318.jar 

Я не могу понять этого. Почему я не могу загрузить класс? Есть идеи?

+0

Вы не можете запускать плагины Eclipse из собственного 'main', так как вы должны использовать' Run As> Eclipse Приложение ", чтобы использовать правильный метод Eclipse' main'. Eclipse имеет много инициализации, которая должна быть выполнена для правильной работы системы плагина. –

+0

Я знаю, что у меня уже работает Eclipse-RCP, но проблема здесь не в том, чтобы создавать/запускать классы внутри среды OSGI, а просто пытаться выполнять загрузку классов извне, из какого-то инструментария. Я думаю, что классы для плагина Eclipse должны быть полезны (возможно, частично, по крайней мере, загружаемы) из безголового звонящего. – leonbloy

ответ

0

Ну, я исправил его, добавив еще несколько плагинов. Полный набор необходимых плагинов, в дополнение к org.eclipse.ui.editors кажется:

org.eclipse.jface.text 
org.eclipse.ui 
org.eclipse.core.resources 
org.eclipse.core.filesystem 

Это всего лишь эмпирическим. Интересно, почему я должен был добавить их вручную, не должны ли они быть зависимыми от org.eclipse.ui.editors? ...

+1

Некоторые зависимостей плагинов могут быть помечены как 're export' и не будут добавлены к явным зависимостям других плагинов. –

Смежные вопросы