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