4

com.simple.plugin次の構造 の Eclipse プラグインを開発しています。プラグインの構造

問題は、実行時に自分のプラグインのクラスにアクセスできないことです。たとえば、SampleHandler.java 内で次のコードを実行するとします。

Class cls = Class.forName("com.simple.handlers.SampleHandler");
Object obj = cls.newInstance();

エラーが発生します:

java.lang.ClassNotFoundException: com.simple.handlers.SampleHandler cannot be found by com.simple.plugin_1.0.0.qualifier*

クラスパスのマニフェスト ランタイム オプションにプラグインのルートが含まれていないため、何が問題なのかわかりません。

4

2 に答える 2

2

あなたのSampleHanderクラスはcom.simple.plugin.handlersパッケージではなくパッケージにありcom.simple.handlersます。したがって、正しいコードは次のとおりです。

Class<?> cls = Class.forName("com.simple.plugin.handlers.SampleHandler");

必要なクラスの完全なパッケージ名を常に指定する必要があります。

于 2016-01-27T19:31:38.130 に答える
1

Eclipse プラグインは、それぞれ独自のクラス ローダーで実行されます。したがって、他のバンドルからクラスを動的にロードすることはできません。

この種の問題に対して、Eclipse osgi には Buddy システムがあります。manifest.mf ファイルで親プロジェクトのバディ ポリシーを変更する必要があります。

Eclipse-BuddyPolicy: Registered

他のプラグイン プロジェクトのクラスを親プロジェクトで使用できるようにするには、これを manifest.mf ファイルに追加します。

Eclipse-RegisterBuddy: {NAME OF THE PARENT PLUGIN}

例えば:

Eclipse-RegisterBuddy: de.myname.myplugin

これで、両方のプラグインからクラスをロードできるようになります。

こちらもご覧ください:

https://wiki.eclipse.org/Context_Class_Loader_Enhancements

于 2016-01-27T18:24:49.380 に答える