簡體   English   中英

通過 JSR-223 執行動態 Java 代碼

[英]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 版。

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

查看SciJava Java Scripting 插件

文檔有點薄。 請參閱Maven 存儲庫並注意解析器是 ImageJ Releases 存儲庫 ( http://maven.imagej.net/content/repositories/releases/ )

您是否在#java9 中看到過JShell 工具API 它不是基於 JSR-223 - 然而它是一個使用 Java 作為“腳本語言”的 Java API(和一個命令行工具)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM