Java与Groovy相结合使用

Java调用Groovy程序一个例子

Groovy工具类:

package com.web.groovytest;

import groovy.lang.GroovyObject;
import groovy.util.GroovyScriptEngine;
import groovy.util.ResourceException;
import groovy.util.ScriptException;

import java.io.IOException;

public class GroovyUtil {

    private static String groovyPath;
    private static GroovyScriptEngine engine;

    public static void init(String tempPath) throws IOException {
        groovyPath = tempPath;

        try {
            engine = new GroovyScriptEngine(groovyPath);
        } catch (IOException e) {
            e.printStackTrace();
            throw e;
        }
    }

    /**
     * 调用指定脚本文件、指定方法名,可传递参数
     *
     * @param scriptName
     * @param methodName
     * @param params
     * @return
     */
    public static Object invokeMethod(String scriptName, String methodName, Object... params) throws Exception {
        Object ret = null;
        Class scriptClass = null;
        GroovyObject scriptInstance = null;

        try {
            scriptClass = engine.loadScriptByName(scriptName);
            scriptInstance = (GroovyObject) scriptClass.newInstance();
        } catch (ResourceException | ScriptException | InstantiationException | IllegalAccessException e) {
            e.printStackTrace();
            throw new Exception("load script " + scriptName + " failed");
        }

        ret = scriptInstance.invokeMethod(methodName, params);
        return ret;
    }

}

测试类:

package com.web.groovytest;

import java.io.IOException;

public class GroovyTest1 {

    public static void main(String[] args) {
        String curPath = System.getProperty("user.dir");
        System.out.println(curPath);

        String path = curPath + "\\develop-test\\src\\groovyscript\\";
        try {
            GroovyUtil.init(path);
        } catch (IOException e) {
            e.printStackTrace();
        }

        long curTime = System.currentTimeMillis();

        String result = null;
        try {
            result = (String) GroovyUtil.invokeMethod("hello.groovy", "helloGroovy", "I", "do");
            System.out.println("run result = " + result);
        } catch (Exception e) {
            e.printStackTrace();
        }

        System.out.println("firstTime = " + (System.currentTimeMillis() - curTime));

        System.out.println("wait modification ....");
        try {
            System.in.read();
        } catch (IOException e) {
            e.printStackTrace();
        }

        curTime = System.currentTimeMillis();
        try {
            result = (String) GroovyUtil.invokeMethod("hello.groovy", "helloGroovy", "I", "do");
            System.out.println("run result = " + result);
        } catch (Exception e) {
            e.printStackTrace();
        }

        System.out.println("secondTime = " + (System.currentTimeMillis() - curTime));
    }

}

Groovy脚本

def helloGroovy(param1, param2){
    println "run groovy param1 = "+ param1 + ", param2 = " + param2;
    //println "run groovy update param1 = "+ param1 + ", param2 = " + param2;
    return "success";
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容