Java OSGi环境中的GroovyShell
目标是在Eclipse插件中使用Java OSGi环境中的GroovyShell,java,eclipse,groovy,osgi,Java,Eclipse,Groovy,Osgi,目标是在Eclipse插件中使用GroovyShell运行简单脚本。脚本的目的是获取有关工作区的一些信息。Groovy本身以OSGi插件的形式嵌入Eclipse,该插件是从Groovy all xxx.jar构建的。包含脚本的插件对org.eclipse.core.runtime和org.eclipse.core.resources具有依赖性(除其他外) 执行脚本的部分代码: Map varmap=newhashmap(); put(“workspace”,ResourcesPlugin.get
GroovyShell
运行简单脚本。脚本的目的是获取有关工作区的一些信息。Groovy本身以OSGi插件的形式嵌入Eclipse,该插件是从Groovy all xxx.jar
构建的。包含脚本的插件对org.eclipse.core.runtime
和org.eclipse.core.resources
具有依赖性(除其他外)
执行脚本的部分代码:
Map varmap=newhashmap();
put(“workspace”,ResourcesPlugin.getWorkspace());
绑定=新绑定(varmap);
GroovyShell shell=newgroovyshell(newgroovyclassloader(getClass().getClassLoader()),绑定);
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
(满栈)
请注意,当从普通Java代码调用这些工作区操作时,一切正常
我想这可能是E4的DI特性使用自己的类加载器造成的。但是,导致代码不在GroovyShell中运行的原因是什么呢
有人吗?不确定您在做什么,但Eclipse插件将只在Eclipse中运行。该代码是Eclipse插件的一部分。对于感兴趣的人,我认为它与此相关:。认为在启用invokedynamic的情况下使用Groovy libs可能会有所帮助,但运气不佳。