我已经在我的应用程序中通过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
之后还有其他选择吗?
答案 0 :(得分:1)
查看SciJava Java Scripting plugin
文档有点薄。请参阅Maven Repository并注意解析器是ImageJ Releases存储库(http://maven.imagej.net/content/repositories/releases/)
答案 1 :(得分:1)
对于这个线程我有些迟了,但是我刚刚发布了jshell-scriptengine的1.1.0版本。
答案 2 :(得分:0)
您是否在#java9中看到了JShell tool和API?它不是基于JSR-223的 - 尽管是Java API(和命令行工具),它使用Java作为脚本语言&#34;。