通过JSR-223

时间:2017-07-11 14:52:38

标签: java jsr223

我已经在我的应用程序中通过JSR-223执行了一段时间的动态代码。基本逻辑是:

ScriptEngineManager scriptEngineManager = new ScriptEngineManager();
ScriptEngine scriptEngine = scriptEngineManager.getEngineByName(engineName);
final CompiledScript compiled = ((Compilable) scriptEngine).compile(script);
Bindings bindings = scriptEngine.getBindings(ScriptContext.ENGINE_SCOPE);
bindings.put("key", value);
compiled.eval(bindings);

这对Nashorn和Groovy脚本引擎很有用。然而,如果扩展应用程序的逻辑不需要知道另一种语言的语法和技巧,那就太好了 - 毕竟基本代码是用Java编写的。

列出内置引擎时,Java似乎没有任何存在:

ScriptEngineManager manager = new ScriptEngineManager();
List<ScriptEngineFactory> factoryList = manager.getEngineFactories();
for (ScriptEngineFactory factory : factoryList) {
    log.debug(factory.getLanguageName());
}

我找到了一些动态Java库,但它们似乎不再维护了。我想可以使用javax.tools.JavaCompiler一起写一些东西,但我希望也许我遗漏了一些基本的东西,并且已经存在这样的事情的工作选项。我也知道有关Java 9中jshell的基础知识,但我还没有听说过允许使用ScriptEngineManager执行代码的任何内容。

我应该如何使用Java语言本身实现脚本?在javax.script.ScriptEngine的帮助下开始实现我自己的javax.tools.JavaCompiler之后还有其他选择吗?

3 个答案:

答案 0 :(得分:1)

查看SciJava Java Scripting plugin

文档有点薄。请参阅Maven Repository并注意解析器是ImageJ Releases存储库(http://maven.imagej.net/content/repositories/releases/

答案 1 :(得分:1)

对于这个线程我有些迟了,但是我刚刚发布了jshell-scriptengine的1.1.0版本。

看一下: https://github.com/eobermuhlner/jshell-scriptengine

答案 2 :(得分:0)

您是否在#java9中看到了JShell toolAPI?它不是基于JSR-223的 - 尽管是Java API(和命令行工具),它使用Java作为脚本语言&#34;。