【发布时间】:2016-08-12 12:50:11
【问题描述】:
我想在 Eclipse 插件中运行以下 sn-p:
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 插件中工作的正确方法是什么?
【问题讨论】:
-
为什么不使用:
ScriptEngineManager man = new ScriptEngineManager(); ScriptEngine engine = man.getEngineByName("nashorn");? -
@JornVernee 因为我无法使用该 API 设置
ClassFilter。
标签: java eclipse-plugin nashorn