引用依赖rhino-engine
<dependency>
<groupId>org.mozilla</groupId>
<artifactId>rhino-engine</artifactId>
<version>1.8.0</version>
</dependency>
核心代码
private static Object runJsCode(String jsCode, String functionName, Object... args) throws ScriptException, NoSuchMethodException {
ScriptEngineManager sem = new ScriptEngineManager();
ScriptEngine engine = sem.getEngineByName("rhino");
engine.eval(jsCode);
Invocable jsInvoke = (Invocable) engine;
return jsInvoke.invokeFunction(functionName, args);
}
完整功能示例
import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
public class RunJs {
public static void main(String[] args) throws ScriptException, NoSuchMethodException {
String jsCode = """
function add(a, b) {
return parseInt(a) + parseInt(b);
}
""";
System.out.println(runJsCode(jsCode, "add", 5, 3));
}
private static Object runJsCode(String jsCode, String functionName, Object... args) throws ScriptException, NoSuchMethodException {
ScriptEngineManager sem = new ScriptEngineManager();
ScriptEngine engine = sem.getEngineByName("rhino");
engine.eval(jsCode);
Invocable jsInvoke = (Invocable) engine;
return jsInvoke.invokeFunction(functionName, args);
}
}