java中直接调用groovy的类.

来源:互联网 发布:魔兽美工代码编辑器 编辑:程序博客网 时间:2024/05/19 09:12

how  directly  call groovy class in java

如何在java中调用groovy的类.

java和groovy如何交互,传送数据.

类似: java 调用 python http://www.cnblogs.com/lmyhao/p/3363385.html

java调用groovy库的优势, 不需要在团队成员强制安装groovy解释器,groovyEclipse插件(自动编译groovy脚本).就能增强java本身处理文件系统,xml解析等的能力.


第一种是调用groovy官方库里的类

第二种是调用自己写的groovy文本的类.(copy并修改自csdn 老伯伯 的文章)

缺点: 如果不安装groovy解释器和groovy Eclipse插件.就无法享受更多的对jdk 类的扩展, 已经脚本化语法的便捷.
    jdk扩展见Unmi 学习 Groovy 之文件操作http://blog.csdn.net/kypfos/article/details/3097032
    脚本语言特点 无main,直接printf
第二步: jar依赖,maven库上传.
第三步: 推广成员安装groovy解释器和groovy Eclipse插件

1. 第一种. 如果用maven的话

在pom的 依赖项里加入.


<groupId>org.codehaus.groovy</groupId>

<artifactId>groovy-all</artifactId>
<version>2.2.2</version>

</dependency>

或者去官网下载grovvy的jar包,导入的eclipse的class依赖中.

就可以直接在java里调用 grovvy库里的类了.

( 如果Eclipse不会自动 import groovy的类,需要在.project中新增  <nature>org.eclipse.jdt.groovy.core.groovyNature</nature> )

import groovy.util.GroovyCollections;
import java.util.List;
public static void main(String[] args) {
        List<Double> lists = new ArrayList<Double>();
lists.add(0.2);
lists.add(0.3);
lists.add(0.2);

Object sum = GroovyCollections.sum(lists);
System.out.println(sum);
}

====


2 第二种.  如果是自己写的groovy 文件.

假如如下 GrovvySystemConfigRead.groovy代码

[java] view plaincopy

  1.   
  2. /** 
  3.  * Created by IntelliJ IDEA. 
  4.  * User: Web-03 
  5.  * Date: 11-4-21 
  6.  * Time: 下午3:43 
  7.  * To change this template use File | Settings | File Templates. 
  8.  */  
  9. class GrovvySystemConfigRead {  
  10.   
  11.    /* 
  12.    *  读取邮件验证访问路径, ConfigurationHolder是groovy框架grais里的某个类
  13.    */  
  14.      static String getName(){  
  15.         return "csdn" ;
  16.      }  
  17. }  


2.1 第一种调用,JAVA类(JavaClassCallGroovy)是可以直接调用GROOVY类(上面写好的SystemConfigRead)的。

(需要安装eclipse插件,自动把groovy文本文件编译为.class ,插件安装见 

 

配置Groovy开发运行环境 

http://blog.csdn.net/mousebaby808/article/details/7092031      or  http://blog.csdn.net/fei33423/article/details/41685997 )

[java] view plaincopy
  1. public class JavaClassCallGroovy{
  2. public static void main(String[] args) {
  3. SystemConfigRead.getName();  
  4.   }
  5. }


2.2 第二种,以反射脚本化方式调用(不推荐),实现脚本化调用,即脚本改动后,无需编译,自动执行的目的.

这种反射化调用不仅可以用在java类调用groovy类,也可以用在java类调用java类,实现java的脚本化.

[java] view plaincopy
  1. /** 
  2.  * JAVA调用GROOVY 
  3.  * @throws IOException 
  4.  * @throws IllegalAccessException 
  5.  * @throws InstantiationException 
  6.  * 添加人:** 
  7.  * 添加时间:211-08-30 14:27 
  8.  */  
  9. public void groovyToJava() throws IOException, IllegalAccessException, InstantiationException {  
  10.     ClassLoader parent = getClass().getClassLoader();  
  11.     GroovyClassLoader loader = new GroovyClassLoader(parent);  
  12.     //找到指定的groovy类  
  13.     Class groovyClass = loader.parseClass(new File("site/grails-app/utils/com/ingping/core/SystemConfigRead.groovy"));  
  14.     //将对象实例化并且强制转换为GroovyObject对象  
  15.     GroovyObject groovyObject = (GroovyObject) groovyClass.newInstance();  
  16.     //readEmailCodeUrl方法名,null 参数值,没有为null  
  17.     System.out.println("" + groovyObject.invokeMethod("readEmailCodeUrl"null));  
  18. }  



0 0