Я программирую плагины Eclipse, используя Kepler SR2. Допустим, я создаю пустой плагин plugin1
и добавляю следующий фиктивный класс:
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
), я добавляю ее вручную в зависимости ("Необходимые подключаемые модули"). Затем начинают происходить забавные вещи. Класс по-прежнему помечен как имеющий ошибки, и появляется следующая загадочная ошибка:
Тип org.eclipse.jface.text.revisions.RevisionInformation не может быть разрешен. На него косвенно ссылаются необходимые файлы .class.
Я не уверен, что это значит, поэтому я пытаюсь добавить org.eclipse.jface.text
к нужным плагинам. Тогда он компилируется без ошибок. Но когда я пытаюсь выполнить свой (по общему признанию глупый, но законный) класс из панели запуска Eclipse, и странное всплывающее окно из панели запуска: «Произошло исключение Java», и консоль выплевывает эту трассировку стека:
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
Я не могу понять это. Почему я не могу загрузить класс? Есть идеи?
main
таким образом, вы должны использоватьRun As > Eclipse Application
, чтобы использовался правильный метод Eclipsemain
. Eclipse имеет много инициализаций, которые необходимо выполнить, чтобы система плагинов функционировала правильно. - person greg-449   schedule 25.05.2014