Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java OSGi环境中的GroovyShell_Java_Eclipse_Groovy_Osgi - Fatal编程技术网

Java OSGi环境中的GroovyShell

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

目标是在Eclipse插件中使用
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可能会有所帮助,但运气不佳。