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
しかし、それは何も変わらないようです。
プラグインに同じクラスローダーを使用させるにはどうすればよいですか?