1. 程式人生 > >java中直接呼叫groovy的類.

java中直接呼叫groovy的類.

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 類的擴充套件, 已經指令碼化語法的便捷. 指令碼語言特點 無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程式碼

  1. /** 
  2.  * Created by IntelliJ IDEA. 
  3.  * User: Web-03 
  4.  * Date: 11-4-21 
  5.  * Time: 下午3:43 
  6.  * To change this template use File | Settings | File Templates. 
  7.  */
  8. class GrovvySystemConfigRead {  
  9.    /* 
  10.    *  讀取郵件驗證訪問路徑, ConfigurationHolder是groovy框架grais裡的某個類
  11.    */
  12.      static String getName(){  
  13.         return "csdn" ;
  14.      }  
  15. }  

2.1 第一種呼叫,JAVA類(JavaClassCallGroovy)是可以直接呼叫GROOVY類(上面寫好的SystemConfigRead)的。

(需要安裝eclipse外掛,自動把groovy文字檔案編譯為.class ,外掛安裝見 

  http://blog.csdn.net/mousebaby808/article/details/7092031      or  http://blog.csdn.net/fei33423/article/details/41685997 )
  1. public class JavaClassCallGroovy{
  2. public static void main(String[] args) {
  3. SystemConfigRead.getName();  
  4.   }
  5. }

2.2 第二種,以反射指令碼化方式呼叫(不推薦),實現指令碼化呼叫,即指令碼改動後,無需編譯,自動執行的目的.

這種反射化呼叫不僅可以用在java類呼叫groovy類,也可以用在java類呼叫java類,實現java的指令碼化.

  1. /** 
  2.  * JAVA呼叫GROOVY 
  3.  * @throws IOException 
  4.  * @throws IllegalAccessException 
  5.  * @throws InstantiationException 
  6.  * 新增人:** 
  7.  * 新增時間:211-08-30 14:27 
  8.  */
  9. publicvoid 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. }