java - 我正在尝试在 java 中运行 groovy 脚本

标签 java groovy runtime state

我有一个已解析的 HTML 文件,其中包含一个带有 groovy 脚本的标签。 我在字符串中有 groovy 脚本,我必须在运行时执行它并保留状态,以便以后可以使用它。

任何人都知道如何:

  1. 在java中运行groovy脚本
  2. 保留状态以供进一步使用。

谢谢!

最佳答案

groovy.util.Eval 类可能是在运行时动态执行 Groovy 的最简单方法。下面给出一个示例:

import groovy.util.Eval;

public class Goovy123 {
    public static void main(String[] args) {
        System.out.println(Eval.me("33*3"));//99
        System.out.println(Eval.me("'foo'.toUpperCase()"));//FOO
    }
}

我在项目中使用了以下 Maven 依赖项来获取所需的库:

<dependency>
    <groupId>org.codehaus.groovy</groupId>
    <artifactId>groovy-all</artifactId>
    <version>2.5.8</version>
    <type>pom</type>
</dependency>

更新:

我发布此更新是为了添加我原来的答案中缺少的州的示例。使用 groovy.lang.Binding 类,您可以将状态保存在变量中并稍后在程序中使用它。下面给出一个示例:

import groovy.lang.Binding;
import groovy.lang.GroovyShell;
import groovy.util.Eval;

public class Goovy123 {
    public static void main(String[] args) throws InterruptedException {
        Binding binding = new Binding();
        String foo="foo";   
        binding.setVariable("foo", foo);
        GroovyShell shell = new GroovyShell(binding);
        System.out.println("Original state: "+binding.getVariable("foo"));
        shell.evaluate("foo=foo.toUpperCase();");
        System.out.println("Changed state: "+binding.getVariable("foo"));
    }
}

关于java - 我正在尝试在 java 中运行 groovy 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58464165/

相关文章:

java - 自定义类加载器时,两个groovy类相互导入导致循环编译错误

java - 执行外部程序

algorithm - 如何计算以下递推关系

java - 更改 Fragment 方向布局时 addView() 中出现错误

java - 方法实现后通用方法的接口(interface)

java - 带有唯一字母的子字符串数

Jenkins 管道如果其他不工作

grails - 当显示在.gsp View 中时,如何使GroovyfirstRowResult仅列出值,而不列出列标题且不包含花括号?

java - 什么是自举方法?

Java:将 JFrame 焦点转移到另一个 JFrame