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