2

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

但这似乎并没有改变任何东西。

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

4

0 回答 0