在Eclipse插件中使用Nashorn Engine

时间:2016-08-12 12:50:11

标签: java eclipse-plugin nashorn

我想在Eclipse插件中运行以下代码片段:

String scriptEnteredByUser = "print(\"Hello World\");";
NashornScriptEngineFactory factory = new NashornScriptEngineFactory();
ScriptEngine engine = factory.getScriptEngine(e -> false);
engine.eval(scriptEnteredByUser);

它不起作用,但在Eclipse中带来以下警告:

  

访问限制:'NashornScriptEngineFactory'类型不是API(对所需库'C:\ Program Files(x86)\ Java \ jdk1.8.0_73 \ jre \ lib \ ext \ nashorn.jar'的限制)

运行时出现以下异常:

  

java.lang.NoClassDefFoundError:jdk / nashorn / api / scripting / NashornScriptEngineFactory

我检查过, nashorn.jar 是JRE的独立部分,所以它应该可以工作。我也不能使用Import-Package,为什么我呢?这些是JRE类/包。

我找到的可能选项以及为什么它们不起作用/不应该使用:

  • nashorn.jar 添加到插件的lib文件夹中 - 快速和脏,并且可能在OSGi上下文中有害
  • 仅使用javax.script - 不可能;看到我需要开始工作的代码
  • 围绕 nashorn.jar 创建一个包装器包 - 如果我们有一个导出JRE包的包,我不知道会发生什么,但它肯定不行

使Nashorn引擎在Eclipse插件中工作的正确方法是什么?

2 个答案:

答案 0 :(得分:0)

有可能你的eclipse没有在带有JDK8的虚拟机上运行。

  • 转到cmd并检查java -version。
  • Eclipse runtime options中指定javahome:8
  • 删除/卸载其他版本的JDK,直到您只安装了JDK 8.

答案 1 :(得分:0)

当运行时配置指定System属性时,它将起作用 -Dosgi.parentClassloader=ext。该属性记录在Eclipse