ClassCastException从ExtensionPoint加载类

时间:2013-11-07 13:18:55

标签: java eclipse eclipse-plugin classloader equinox

我们正在尝试使用Eclipse 3通过Extensionpoint加载一个类。我们在插件中定义了extensionPoint,它只需要一个实现IScript的类。 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

但这似乎没有任何改变。

我们如何强制插件使用相同的类加载器?

0 个答案:

没有答案