Groovy脚本有两种调用方式:一是作为普通脚本文件(.groovy),使用Groovy提供的命令行groovy或者通过类groovy.lang.GroovyShell来调用;
二是作为普通的Java类文件(.class),用传统的方式来调用,这需要先使用groovyc把脚本文件编译成类文件,然后再使用java命令来调用。
在上一篇XXXX中,在eclipse中配置插件,运行的时候是使用第二种方式,因为会有自动编译的文件,如GTest.class, 在bin-groovy目录下。
本篇继续在eclipse中做测试。
目录结构:
groovy的编译后的class在bin-groovy下,在eclipse中构建路径设置输出GroovyJava/bin,java的class会编译到bin下。
先上代码,互相调用的部分都已经写好了。
有一个java 类和一个接口:
package com.kevin;
public interface IPerson
{
public void say(String name);
}
package com.kevin;
import groovy.lang.GroovyClassLoader;
import java.io.File;
import java.io.IOException;
import org.codehaus.groovy.control.CompilationFailedException;
public class Person
{
private String name;
private int age;
public Person()
{
}
public Person(String name, int age)
{
this.age = age;
this.name = name;
}
/**
* 此方法会在groovy中调用
*/
public void sayHello()
{
System.out.println("hello, my name is: " + name + " ,and age is:" + age);
}
/**
* 调用groovy中的方法
*/
private void foo()
{
try
{
ClassLoader cl = getClass().getClassLoader();
GroovyClassLoader groovyCl = new GroovyClassLoader(cl);
Class groovyClass = groovyCl.parseClass(new File("src/GPerson.groovy"));
IPerson p = (IPerson) groovyClass.newInstance();
p.say("LUCY");//调用GPerson.groovy实现接口IPerson的方法
}
catch (CompilationFailedException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
catch (InstantiationException e)
{
e.printStackTrace();
}
catch (IllegalAccessException e)
{
e.printStackTrace();
}
}
public static void main(String[] args)
{
Person p = new Person();
p.foo();
}
}
接下来是GPerson.groovy
/**
* @author Kevin
*
*/
import com.kevin.IPerson;
import com.kevin.Person;
public class GPerson implements IPerson{
//接口IPerson的具体实现,此方法会在java中调用
public void say(String name){
println "Hello, $name! ";
}
def foo(){
Person p = new Person("TOM",45);
p.sayHello();
}
static void main(args) {
GPerson gp = new GPerson();
//gp.say("JACK");
gp.foo();
}
}
在groovy中使用java:
在GPerson.groovy运行主方法,new了一个Person.java的实例,并调用了其中的sayHello()方法。
输出是: hello, my name is: TOM ,and age is:45
在java中调用groovy:
在Person.java 中运行main方法,在foo()中通过GroovyClassLoader获得GPerson的实例,并调用其中的say()方法。
输出是: Hello, LUCY!
当然也可以在groovy中使用现成的java类,比如spring的jar包。
把jar包丢进来,在classpath中包括进来,
用到的时候在头部来一句: import org.springframework.util.StringUtils;
跟在java中导入一样。
结束。
JavaEye推荐