[英]Java and JSR-223 to run Python (or Ruby) code on a Coldfusion server
[英]Executing dynamic Java code over JSR-223
我已經通過 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.tools.JavaCompiler
的幫助下開始實現我自己的javax.script.ScriptEngine
之外,還有其他選擇嗎?
我對這個線程有點晚了,但我剛剛發布了 jshell-scriptengine 的 1.1.0 版。
文檔有點薄。 請參閱Maven 存儲庫並注意解析器是 ImageJ Releases 存儲庫 ( http://maven.imagej.net/content/repositories/releases/ )
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.