La primera prueba que he realizado ha sido la de ejecutar un método de una clase groovy dentro de un main de java.
En concreto he creado la clase "HelloGroovy.groovy":
package main class HelloGroovy { public String getHello(){ return "Hello from groovy class"; } }Y después una clase Java que llama al método "getHello", la clase "EmbeddedGroovy.java":
package main package main; import groovy.lang.GroovyClassLoader; import groovy.lang.GroovyObject; import java.io.File; public class EmbeddedGroovy { public static void main(String args[])throws Exception{ ClassLoader parent = EmbeddedGroovy.class.getClassLoader(); GroovyClassLoader loader = new GroovyClassLoader(parent); Class helloGroovyClass = loader.parseClass(new File("src/main/HelloGroovy.groovy")); GroovyObject groovyObject = (GroovyObject) helloGroovyClass.newInstance(); Object[] arguments = {}; String hello = (String)groovyObject.invokeMethod("getHello", arguments); System.out.println(hello); } }
Como se puede apreciar esta llamada es muy parecida a la que se haría si la clase en lugar de ser de tipo groovy fuera java, pero existen otras manera de invocar a scripts groovy muy interesantes por ejemplo utilizando GroovyScriptEngine, de esta manera se puede ejecutar un script groovy dentro de una clase java tal y como se muestra en el siguiente ejemplo.
Script groovy hello.groovy:
println("Hello World");
Y la clase java ExecuteGroovyScript.java:
package main;
package main; import groovy.lang.Binding; import groovy.util.GroovyScriptEngine; public class ExecuteGroovyScript { public static void main(String args[])throws Exception{ String[] scripts = new String[] { "src/main" }; GroovyScriptEngine gse = new GroovyScriptEngine(scripts); Binding binding = new Binding(); gse.run("hello.groovy", binding); } }
Al ser totalmente interpretado dota a java de la posibilidad de modificar script groovy y afectar al programa que lo incorpora sin necesidad de compilar, es más tal y como se muestra en la página http://groovy.codehaus.org/Embedding+Groovy existe la posibilidad de pasar parámetros a los scripts.
En la página mencionada anteriormente también describe un ejemplo básico utilizando la shell de groovy.