說明
在jdk11就標注了要取消NashornScriptEngineFactory類,在jdk17正式移除,所以在17上得加入pom依賴
<dependency>
<groupId>org.openjdk.nashorn</groupId>
<artifactId>nashorn-core</artifactId>
<version>15.3</version>
</dependency>
效果圖
代碼
package cn.myauthx.api;
import org.junit.jupiter.api.Test;
import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
public class test {
@Test
public void test(){
String jsStr = "function sum(c1,c2){\n" +
"\treturn c1+c2;\n" +
"}";
String ret = "";
System.out.println(runJs(jsStr,"sum","a","b"));
}
/**
* 執行JS函數,參數和返回值都是String類型
* @param jsStr
* @param func
* @param parameter
* @return
*/
public String runJs(String jsStr,String func,String...parameter){
String regular = jsStr;
ScriptEngine engine = new ScriptEngineManager().getEngineByName("javascript"); //創建引擎實例
Object result = "";
try {
engine.eval(regular); //編譯
if (engine instanceof Invocable) {
result = ((Invocable) engine).invokeFunction(func, parameter); // 執行方法
return String.valueOf(result);
}
} catch (Exception e) {
return "表達式runtime錯誤:" + e.getMessage();
}
return "";
}
}