OSGi环境中的GroovyShell

时间:2014-01-07 10:03:11

标签: java eclipse groovy osgi

目标是在Eclipse插件中使用GroovyShell运行简单脚本。脚本的目的是获取有关工作空间的一些信息。 Groovy本身以从groovy-all-xxx.jar构建的OSGi插件的形式嵌入到Eclipse中。包含该脚本的插件具有与org.eclipse.core.runtimeorg.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中运行呢?

任何?

0 个答案:

没有答案