2009-07-27 2 views
2

Я новичок в разработке плагинов Eclipse RCP, и у меня есть следующая проблема: я пытаюсь создать экземпляр объекта MessageConsole в своем плагине. Я создаю соответствующую зависимость для org.eclipse.ui.console в MANIFEST.MF, создаю плагин, а затем загружаю плагин внутри одного и того же приложения Eclipse (я экспортирую плагин как zip, shutdown Eclipse, разархивирую и копирую плагин в Eclipse's plugin directory, перезапустите Eclipse). Я получаю NoClassDefFoundError, когда этот плагин загружен. Если я раскомментирую одну строку исходного кода (см. Ниже), которая пытается создать экземпляр MessageConsole, плагин отлично работает. Подробности следующие.зависимостей подключаемого модуля eclipse и classnotfoundexception

MANIFEST.MF:

 
Manifest-Version: 1.0 
Bundle-ManifestVersion: 2 
Bundle-Name: IntrospectorPlugin Plug-in 
Bundle-SymbolicName: IntrospectorPlugin; singleton:=true 
Bundle-Version: 1.0.1 
Bundle-Activator: introspectorplugin.Activator 
Require-Bundle: org.eclipse.ui, 
org.eclipse.core.runtime, 
org.eclipse.ui.console 
Bundle-ActivationPolicy: lazy 
Bundle-RequiredExecutionEnvironment: JavaSE-1.6 

IntrospectorView.java:

 
import org.eclipse.ui.console.ConsolePlugin; 
import org.eclipse.ui.console.IConsole; 
import org.eclipse.ui.console.IConsoleConstants; 
import org.eclipse.ui.console.IConsoleView; 
import org.eclipse.ui.console.MessageConsole; 
import org.eclipse.ui.console.MessageConsoleStream; 
... 
    MessageConsole myConsole = new MessageConsole("IntrospectorView plugin console", 
     imageDescriptorConsole); 

Исключение:

 
java.lang.ClassNotFoundException: org.eclipse.ui.console.MessageConsole 
    at org.eclipse.osgi.framework.internal.core.BundleLoader.findClassInternal(BundleLoader.java:483) 
    at org.eclipse.osgi.framework.internal.core.BundleLoader.findClass(BundleLoader.java:399) 
    at org.eclipse.osgi.framework.internal.core.BundleLoader.findClass(BundleLoader.java:387) 
    at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:87) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
    at java.lang.ClassLoader.loadClassInternal(Unknown Source) 
    at introspectorplugin.views.IntrospectorView.makeConsole(IntrospectorView.java:453) 
    at introspectorplugin.views.IntrospectorView.createPartControl(IntrospectorView.java:436) 
    at org.eclipse.ui.internal.ViewReference.createPartHelper(ViewReference.java:371) 
    at org.eclipse.ui.internal.ViewReference.createPart(ViewReference.java:230) 
    at org.eclipse.ui.internal.WorkbenchPartReference.getPart(WorkbenchPartReference.java:594) 
    at org.eclipse.ui.internal.PartPane.setVisible(PartPane.java:306) 
    at org.eclipse.ui.internal.ViewPane.setVisible(ViewPane.java:531) 
    at org.eclipse.ui.internal.presentations.PresentablePart.setVisible(PresentablePart.java:180) 
    at org.eclipse.ui.internal.presentations.util.PresentablePartFolder.select(PresentablePartFolder.java:270) 
    at org.eclipse.ui.internal.presentations.util.LeftToRightTabOrder.select(LeftToRightTabOrder.java:65) 
    at org.eclipse.ui.internal.presentations.util.TabbedStackPresentation.selectPart(TabbedStackPresentation.java:473) 
    at org.eclipse.ui.internal.PartStack.refreshPresentationSelection(PartStack.java:1256) 
    at org.eclipse.ui.internal.PartStack.createControl(PartStack.java:668) 
    at org.eclipse.ui.internal.PartStack.createControl(PartStack.java:576) 
    at org.eclipse.ui.internal.PartSashContainer.createControl(PartSashContainer.java:568) 
    at org.eclipse.ui.internal.PerspectiveHelper.activate(PerspectiveHelper.java:271) 
    at org.eclipse.ui.internal.Perspective.onActivate(Perspective.java:968) 
    at org.eclipse.ui.internal.WorkbenchPage.onActivate(WorkbenchPage.java:2593) 
    at org.eclipse.ui.internal.WorkbenchWindow$25.run(WorkbenchWindow.java:2873) 
    at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70) 
    at org.eclipse.ui.internal.WorkbenchWindow.setActivePage(WorkbenchWindow.java:2854) 
    at org.eclipse.ui.internal.WorkbenchWindow$19.runWithException(WorkbenchWindow.java:2171) 
    at org.eclipse.ui.internal.StartupThreading$StartupRunnable.run(StartupThreading.java:31) 
    at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) 
    at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:133) 
    at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3800) 
    at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3425) 
    at org.eclipse.ui.application.WorkbenchAdvisor.openWindows(WorkbenchAdvisor.java:803) 
    at org.eclipse.ui.internal.Workbench$27.runWithException(Workbench.java:1363) 
    at org.eclipse.ui.internal.StartupThreading$StartupRunnable.run(StartupThreading.java:31) 
    at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) 
    at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:133) 
    at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3800) 
    at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3425) 
    at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2295) 
    at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2200) 
    at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:495) 
    at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:288) 
    at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:490) 
    at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) 
    at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:113) 
    at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:193) 
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) 
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) 
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:386) 
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:549) 
    at org.eclipse.equinox.launcher.Main.basicRun(Main.java:504) 
    at org.eclipse.equinox.launcher.Main.run(Main.java:1236) 

Я посмотрел через мою Plugins книгу, которая говорит о убедившись, что во время компиляции зависимостей значительно зависят от зависимостей во время выполнения - если я запускаю плагин в том же исполняемом файле Eclipse что я строю, у меня не должно быть этой проблемы? Кроме того, я спустил дерево зависимостей подключаемых модулей и проверил, что у меня есть все необходимые плагины.

Вся помощь приветствуется, спасибо!

ответ

1

Я установил более новую версию Eclipse сегодня, добавил мой плагин в каталог плагинов, и все работает хорошо. Очевидно, что я столкнулся с проблемой конфигурации или причудой. Моя предыдущая версия была Ganymede, и теперь я управляю Galileo.

+0

Благодарим вас за отзыв. +1 – VonC

+0

damn - У меня есть аналогичная проблема, но я уже запускаю Galileo ... Classloaderhell. –

+0

Есть ли лучшее решение? Поделись, пожалуйста.. –

0

Вы можете попробовать и сравнить реализацию с другими, например и проектов, включая вид консоли, как:

В обоих случаях , проверьте их зависимости (plugin.xml или MANIFEST.MF), чтобы узнать, в чем разница, надеюсь, объясняя, почему ваш плагин не включает соответствующие классы.

+0

Спасибо за помощь VonC. Я смог решить проблему, просто установив новую версию Eclipse. Не очень обнадеживает, но он работает. Я следил за вашими ссылками и сравнивал файлы конфигурации плагина - они были почти идентичны. – 2009-07-29 21:24:11

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