Я программирую плагины 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
Я не могу понять этого. Почему я не могу загрузить класс? Есть идеи?
Вы не можете запускать плагины Eclipse из собственного 'main', так как вы должны использовать' Run As> Eclipse Приложение ", чтобы использовать правильный метод Eclipse' main'. Eclipse имеет много инициализации, которая должна быть выполнена для правильной работы системы плагина. –
Я знаю, что у меня уже работает Eclipse-RCP, но проблема здесь не в том, чтобы создавать/запускать классы внутри среды OSGI, а просто пытаться выполнять загрузку классов извне, из какого-то инструментария. Я думаю, что классы для плагина Eclipse должны быть полезны (возможно, частично, по крайней мере, загружаемы) из безголового звонящего. – leonbloy