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 老伯伯 的文章
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程式碼
- /**
- * Created by IntelliJ IDEA.
- * User: Web-03
- * Date: 11-4-21
- * Time: 下午3:43
- * To change this template use File | Settings | File Templates.
- */
- class GrovvySystemConfigRead {
- /*
- * 讀取郵件驗證訪問路徑, ConfigurationHolder是groovy框架grais裡的某個類
- */
- static String getName(){
- return "csdn" ;
- }
- }
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 )- public class JavaClassCallGroovy{
- public static void main(String[] args) {
- SystemConfigRead.getName();
- }
- }
2.2 第二種,以反射指令碼化方式呼叫(不推薦),實現指令碼化呼叫,即指令碼改動後,無需編譯,自動執行的目的.
這種反射化呼叫不僅可以用在java類呼叫groovy類,也可以用在java類呼叫java類,實現java的指令碼化.
- /**
- * JAVA呼叫GROOVY
- * @throws IOException
- * @throws IllegalAccessException
- * @throws InstantiationException
- * 新增人:**
- * 新增時間:211-08-30 14:27
- */
- publicvoid groovyToJava() throws IOException, IllegalAccessException, InstantiationException {
- ClassLoader parent = getClass().getClassLoader();
- GroovyClassLoader loader = new GroovyClassLoader(parent);
- //找到指定的groovy類
- Class groovyClass = loader.parseClass(new File("site/grails-app/utils/com/ingping/core/SystemConfigRead.groovy"));
- //將物件例項化並且強制轉換為GroovyObject物件
- GroovyObject groovyObject = (GroovyObject) groovyClass.newInstance();
- //readEmailCodeUrl方法名,null 引數值,沒有為null
- System.out.println("" + groovyObject.invokeMethod("readEmailCodeUrl", null));
- }