Groovy脚本有两种调用方式:一是作为普通脚本文件(.groovy),使用Groovy提供的命令行groovy或者通过类groovy.lang.GroovyShell来调用;
二是作为普通的Java类文件(.class),用传统的方式来调用,这需要先使用groovyc把脚本文件编译成类文件,然后再使用java命令来调用。
在上一篇XXXX中,在eclipse中配置插件,运行的时候是使用第二种方式,因为会有自动编译的文件,如GTest.class, 在bin-groovy目录下。
本篇继续在eclipse中做测试。
目录结构:
[img]/upload/attachment/92139/d0eeba97-742e-354c-8972-9d42a4893676.jpg[/img]
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中导入一样。
结束。
相关资源:敏捷开发V1.0.pptx