目标是在Eclipse插件中使用GroovyShell
运行简单脚本。脚本的目的是获取有关工作空间的一些信息。 Groovy本身以从groovy-all-xxx.jar
构建的OSGi插件的形式嵌入到Eclipse中。包含该脚本的插件具有与org.eclipse.core.runtime
和org.eclipse.core.resources
的依赖关系(包括其他)。
执行脚本的部分代码:
Map<String, Object> varmap = new HashMap<String, Object>();
varmap.put("workspace", ResourcesPlugin.getWorkspace());
Binding binding = new Binding(varmap);
GroovyShell shell = new GroovyShell(new GroovyClassLoader(getClass().getClassLoader()), binding);
System.out.println(shell.evaluate("return workspace.getRoot().getProject(\"abc\").getName()"));
这让我:
org.eclipse.e4.core.di.InjectionException: java.lang.NoClassDefFoundError:
[Lorg/eclipse/core/runtime/IPluginPrerequisite
...
Caused by: java.lang.ClassNotFoundException: org.eclipse.core.runtime.IPluginPrerequisite
cannot be found by org.eclipse.equinox.registry_3.5.301.v20130717-1549
(完整堆栈here)
请注意,从普通Java代码调用这些工作空间操作时,一切正常。
我想这可能是由于E4的DI功能使用它自己的类加载器引起的。但是,是什么导致代码不能在GroovyShell中运行呢?
任何?