网站推广.NET

网站推广.NET

Java怎么调用groovy脚本

来源:互联网

使用方式

GroovyShell

groovyshell 是 groovy 的一个核心类,它可以在 java 中执行 groovy 代码。

我们先写一个简单的groovy测试脚本,输出 “hello world”。

package com.arm.groovyprintln("GroovyShell test : hello world");

那么在java中怎么调用呢?其实只需要3行代码就可以了:

GroovyShell shell = new GroovyShell();script script = shell.parse(new FileReader("test.groovy"));script.run();
  • 其执行过程是:首先实例化一个GroovyShell的对象,然后通过GroovyShell解析groovy脚本文件的内容并返回script对象,最后执行run()方法,执行脚本内容。

  • 这种方式支持支持 REPL(Read-eval-Print Loop)模式,可以在命令行中逐行输入和执行 Groovy 代码。适用于快速测试和调试 Groovy 代码,或者是项目中有独立的可执行的groovy脚本文件。

    立即学习“Java免费学习笔记(深入)”;

GroovyclassLoader

我们先写一个简单的groovy测试脚本,输出 “hello world”。

package com.arm.groovydef test() {    println("GroovyClassLoader test : hello world");}

那么在java中怎么调用呢?

try (GroovyClassLoader classLoader = new GroovyClassLoader()) {    Class<?> groovyClass = classLoader.parseClass(new File("test.groovy"));    GroovyObject groovyObject = (GroovyObject) groovyClass.newInstance();    groovyObject.invokeMethod("test", null);}

其执行过程是:首先实例化一个GroovyClassLoader的对象,然后通过GroovyClassLoader 解析groovy脚本并生成一个Class文件,在然后实例化一个GroovyObject,通过GroovyObject执行脚本中的方法。

可以看到这种方式比较强大的,其通过类加载的方式进行脚本的加载和解析,使其在java中可以像调用java类的方法一样调用groovy脚本中的方法。因此GroovyClassLoader 适用于需要动态加载和执行 Groovy 脚本的场景,如插件化系统、动态扩展;也适用于一些需要在运行时动态生成和编译代码的场景。

比如我们可以定义个groovy类,其实现一个java接口,在java运行时我们可以将这个groovy加载到spring容器中,通过bean的方式使用groovy脚本。

当然这种方式我们也可以直接写脚本代码,而无需要脚本文件:

Binding binding = new Binding();binding.setVariable("name", "Groovy");GroovyShell shell = new GroovyShell(binding);Object result = shell.evaluate("println &#39;Hello, &#39; + name");

上述示例直接用 shell.evaluate() 的方式直接执行脚本语句。

ScriptEngineManager

首先我们还是准备一个脚本文件:

package com.arm.groovyprintln("ScriptEngineManager test : hello world");

java调用:

ScriptEngineManager manager = new ScriptEngineManager();ScriptEngine engine = manager.getEngineByName("groovy");engine.eval(new FileReader("test.groovy"));

其实这种方式和第一种方式大同小异,二选其一就可以了。

groovy教程