2

Eclipse 3 を使用して Extensionpoint を介してクラスをロードしようとしています。IScript を実装するクラスのみを必要とするプラグインで extensionPoint を定義しました。IScript は非常に単純です。

public interface IScript {
    void execute(ScriptEngine engine);
}

インターフェースが入っているパッケージは、その拡張ポイントを使用したいプラグインからのみ見えます。IScriptそこには、拡張機能を介して実装および提供されるクラスがあります。

public class MyScript implements IScript {
    public void execute(ScriptEngine engine) {
        // something
    }
}

このクラスは完全に表示されます。

問題

を使用してこの拡張機能を取得したい場合

IConfigurationElement[] configurationElementsFor = Platform.getExtensionRegistry().getConfigurationElementsFor("my.extensionpoint");
for (IConfigurationElement element : configurationElementsFor) {
    Object obj = element.createExecutableExtension("class");
    IScript script = (IScript) obj;
    }
}

拡張子が見つかり、クラス ( ) をロードできMyScriptますが、クラスを にキャストできませんIScript

調査の結果、両方のプラグイン ( を含むプラグインと を含むプラグイン) が異なるクラスローダーを使用IScriptしている可能性が高いことがわかりました。MyScriptただし、これを修正する方法に関する情報は見つかりません。他のいくつかのプロジェクトでは、

Eclipse-ExtensibleAPI: true

しかし、それは何も変わらないようです。

プラグインに同じクラスローダーを使用させるにはどうすればよいですか?

4

0 に答える 0