如何为单个引擎实例设置Java 8 Nashorn JavaScript引擎选项

3
我已经阅读了Nashorn支持一些选项,但似乎所有这些选项都没有文档记录
它们可以通过设置系统属性来使用,但它们是全局的。我想要对单个引擎实例进行编程设置。 在这里你可以阅读到我想要的方式指定选项,但这些类是内部的,所以我会得到这种错误:
"Access restriction: The type NashornScriptEngineFactory is not accessible due to restriction on required library C:\Program Files\Java\jdk1.8.0\jre\lib\ext\nashorn.jar".

我找不到使用JavaScript API设置这些选项的方法。
编辑:
看起来问题在于Eclipse限制了我的使用权限,而不是直接使用Nashorn引擎出现了问题。但我会具体说明问题。
有没有一种方法可以在不使用非javax.script API的Nashorn类的情况下设置单个Nashorn引擎实例的选项?

1
你能举个例子说明你想要改变的选项吗?这样我们可以讨论得更具体。 - David P. Caldwell
我最想要的选项是 --no-java - aalku
当我准备复制Mike Clark的答案时,我看到它出现了。它有效吗?java -version输出什么? - David P. Caldwell
Nashorn选项可以在这里找到:http://docs.oracle.com/javase/8/docs/technotes/tools/windows/jjs.html。 - wickund
1
通常我不想说消极的话,但是我们在这里已经做了很多Nashorn相关的工作,我发现它通常文档不全(有文档的部分也经常零散或令人困惑),实现方式也让人沮丧和奇怪。这是我曾经遇到的最棘手的Java包。 - Steve B.
显示剩余2条评论
1个回答

3
以下程序在我的电脑上成功运行:
import javax.script.*;
import jdk.nashorn.api.scripting.*;
public class NashTest {
    public static void main(String[] args) throws ScriptException {
        NashornScriptEngineFactory factory = new NashornScriptEngineFactory();
        ScriptEngine engine = 
            factory.getScriptEngine(new String[] { "--global-per-engine" });
        engine.eval("java.lang.System.out.println('hello world!')");
    }
}

请确保您使用的是发布版本的JRE / JDK 8。


1
它可以在maven/javac中工作,但无法在使用相同JDK配置的eclipse中工作(两种情况都是最新版本)。在eclipse中,我遇到了这个错误:“访问限制:由于对所需库C:\Program Files\Java\jdk1.8.0_05\jre\lib\ext\nashorn.jar的限制,类型NashornScriptEngineFactory不可访问”。 - aalku

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接