我们正在尝试使用 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
但这似乎并没有改变任何东西。
我们如何强制插件使用相同的类加载器?