在java中動態執行js代碼


說明

在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 "";
    }

}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM