(1)从Groovy调用Java
从Groovy调用Java很简单,只要把JAR放到CLASSPATH中,然后用标准的import语句就行了。
以joda-time为例,下载joda-time,地址:https://github.com/JodaOrg/joda-time/releases/download/v2.6/joda-time-2.6-dist.tar.gz
解压,将joda-time-2.6.jar放到Groovy安装目录/lib下
示例代码:
import org.joda.time.*; DateTime dateTime=new DateTime(); int month=dateTime.getMonthOfYear(); println month println dateTime.toString() 输出 1 2015-01-05T19:16:07.107+08:002)从Java调用Groovy
从java程序调用Groovy需要把Groovy及其相关的JAR放到这个程序的CLASSPATH下,因为它们都是运行时的依赖项。
可以直接把groovy安装目录/embeddable/groovy-all-2.4.0-rc-1.jar放到java项目的CLASSPATH中。
下面是几种从Java调用Groovy代码的办法
- 使用Bean Scripting Framework(BSF),即JSR223;
- 使用GroovyShell;
- 使用GroovyClassLoader;
- 使用GroovyScriptEngine;
- 使用嵌入式Groovy控制台。
1)GroovyShell
在临时性快速调用Groovy并计算表达式或类似于脚本的代码时,可以用GroovyShell。
import groovy.lang.Binding; import groovy.lang.GroovyShell; /** * Created with IntelliJ IDEA. * User: billlee * Date: 2015/1/5 * Time: 19:28 * To change this template use File | Settings | File Templates. */ public class GroovyShellDemo { public static void main(String[] args) { Binding binding=new Binding(); binding.setVariable("x",3); binding.setVariable("y",0.2); GroovyShell groovyShell=new GroovyShell(binding); Object value=groovyShell.evaluate("x+y"); System.out.println("x+y="+value.toString()); value=groovyShell.evaluate("x-y"); System.out.println("x-y="+value.toString()); value=groovyShell.evaluate("x*y"); System.out.println("x*y="+value.toString()); value=groovyShell.evaluate("x/y"); System.out.println("x/y="+value.toString()); } } 输出: x+y=3.2 x-y=2.8 x*y=0.6000000000000001 x/y=15.02)GroovyClassLoader
GroovyClassLoader的表现和Java的ClassLoader很像,找到类和想要调用的方法,然后调用就行了。
示例代码:
GetMaxValueOfList.groovy
/** * Created with IntelliJ IDEA. * User: billlee * Date: 2015/1/5 * Time: 19:36 * To change this template use File | Settings | File Templates. */ class GetMaxValueOfList { def Integer getMaxOfList(List list) { list.max() } }GroovyClassLoaderDemo.java
import groovy.lang.GroovyClassLoader; import groovy.lang.GroovyObject; import java.io.File; import java.util.ArrayList; /** * Created with IntelliJ IDEA. * User: billlee * Date: 2015/1/5 * Time: 19:38 * To change this template use File | Settings | File Templates. */ public class GroovyClassLoaderDemo { public static void main(String[] args) { GroovyClassLoader loader=new GroovyClassLoader(); try { Class<?> groovyClass=loader.parseClass(new File("GetMaxValueOfList.groovy")); GroovyObject groovyObject=(GroovyObject)groovyClass.newInstance(); ArrayList<Integer> integers=new ArrayList<>(); integers.add(1); integers.add(122); integers.add(145); integers.add(173); Object[] arguments={integers}; Object maxValue=groovyObject.invokeMethod("getMaxOfList",arguments); System.out.println("maxValue="+maxValue.toString()); } catch (Exception e) { e.printStackTrace(); System.out.println("Exception e="+e.toString()); } } } 输出为: maxValue=1733)GroovyScriptEngine
使用GroovyScriptEngine要指明Groovy代码的URL或所在目录。Groovy脚本引擎会加载那些脚本,并在必要时进行编译,包括其中的依赖脚本。
hello.groovy
def helloStatement="Hello Groovy ,Welcome ${name}"
GroovyScriptEngineDemo.java
import groovy.lang.Binding; import groovy.util.GroovyScriptEngine; /** * Created with IntelliJ IDEA. * User: billlee * Date: 2015/1/5 * Time: 20:25 * To change this template use File | Settings | File Templates. */ public class GroovyScriptEngineDemo { public static void main(String[] args) { try { String root[]=new String[]{"C:/groovy"}; GroovyScriptEngine groovyScriptEngine=new GroovyScriptEngine(root); Binding binding=new Binding(); binding.setVariable("name","billlee"); Object object=groovyScriptEngine.run("hello.groovy",binding); System.out.println("output "+object.toString()); } catch (Exception e) { e.printStackTrace(); System.out.println("Exception e="+e.toString()); } } } 输出: output Hello Groovy ,Welcome billlee
相关推荐
Groovy 学习笔记 Groovy 学习笔记
Groovy
Groovy 调用 Java 类groovy 调用 Java class 十分方便,只需要在类前导入该 Java 类,在 Groovy 代码中就可以无缝使用该
Groovy学习笔记,内容如下: 1.概念 2.基本语法 3.字符串 4.集合 5.类和闭包 6.控制语句 7.操作符重载 8.I/O操作 9.高级应用 10.正则表达式
对Groovy开发环境设置,基本语法做了简单明了的介绍
Making Java Groovy is a practical handbook for developers who want to blend Groovy into their day to day work with Java It starts by introducing the key differences between Java and Groovy and how you...
Java调用Groovy,实时动态加载数据库groovy脚本,java读取mongoDB的groovy脚本,加载实时运行,热部署
第1章 数字和字符串 第2章 List的简单介绍 第3章 String的特殊用法 第4章 闭包 第5章 集合+闭包 第6章 Map和Range 第7章 函数
Groovy环境搭建教程中的例子工程,纯Java、纯Groovy以及Java+Groovy混合 教程参考:http://blog.csdn.net/rcom10002/archive/2011/06/26/6568557.aspx
概述主要介绍Java、spring与groovy结合使用,高清英文版本
Java中使用Groovy的三种方式,详细见我的博客。
Making Java Groovy
java 动态脚本语言 精通 Groovy
1、eclipse安装groovy的插件。 2、创建java project。 3、把groovy-all-2.1.9.jar,加入...4、编写hello.groovy脚本文件,并在java代码中调用脚本文件 http://blog.csdn.net/bolg_hero/article/details/19077981
Making Java Groovy Kenneth A. Kousen 1.Easier Java 2.Closures, builders, and metaprogramming 3.Gradle for builds, Spock for testing 4.Groovy frameworks like Grails and Griffon 源码
JGSK, Java,Groovy,Scala,Kotlin 四种语言的特点对比
Groovy语法&Gradle配置学习笔记
什么是 Groovy?...从学习的角度看,如果知道如何编写 Java 代码,那就已经了解 Groovy 了。Groovy 和 Java 语言的主要区别是:完成同样的任务所需的 Groovy 代码比 Java 代码更少。(有时候会少很多!)
很好的学习Groovy的学习资料, 很实用。。 个人感觉Groovy是Java敏捷开发的首选。