在Eclipse插件内部使用Nashorn引擎

问题描述 投票:0回答:2

我有以下要在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插件中工作的正确方法是什么?

我有以下要在Eclipse插件中运行的代码段:String scriptEnteredByUser =“ print(\” Hello World \“);”;“; NashornScriptEngineFactory factory =新的NashornScriptEngineFactory()...

java eclipse-plugin nashorn
2个回答
0
投票

可能是您的日食未在具有JDK8的虚拟机上运行。


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.