2009-07-27 24 views
2

Eclipse RCPプラグインの開発に新しく、次の問題があります。プラグインでMessageConsoleオブジェクトをインスタンス化しようとしています。私はMANIFEST.MFのorg.eclipse.ui.consoleに適切な依存関係を作成し、プラグインをビルドし、同じEclipseアプリケーション内でプラグインをロードします(プラグインをzipとしてエクスポートし、Eclipseをシャットダウンし、プラグインを解凍してコピーしますEclipseのプラグインディレクトリ、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) 

依存関係は多くのターゲットランタイム依存関係をターゲットにしています - 同じEclipse実行可能ファイルでプラグインを実行すると私が構築する、私はこの問題がないはずですか?さらに、私はプラグインの依存関係ツリーを下り、すべての必要なプラグインがあることを確認しました。

すべてのご協力ありがとうございます!

答えて

1

プラグインをプラグインディレクトリに追加してすべて正常に動作しました。明らかに私はいくつかの構成上の問題や癖に遭遇しました。私の以前のバージョンはGanymedeでした。今はガリレオを実行しています。

+0

このフィードバックをいただきありがとうございます。 +1 – VonC

+0

私は似たような問題を抱えていますが、すでにGalileoを実行しています... Classloaderhell。 –

+0

もっと良い解決策はありますか?シェアしてください.. –

0

あなたが好き、コンソールビューを含む他の例やプロジェクトで実装を試みると比較することができます:両方の場合

その違いが何であるかを確認するために依存関係(plugin.xmlまたはMANIFEST.MF)を確認し、プラグインに関連するクラスが含まれていない理由を説明してください。

+0

VonCにお手伝いいただきありがとうございます。私はEclipseの新しいバージョンをインストールするだけで問題を解決することができました。あまり励まらないが、うまくいく。私はあなたのリンクに従って、私のプラグイン設定ファイルを比較しました。 –

関連する問題