我正在尝试 运行 groovy java 中的脚本
I'm trying to run groovy script inside java
我有一个已解析的 HTML 文件,其中包含一个带有 groovy 脚本的标记。
我在字符串中有 groovy 脚本,我必须在运行时执行它并保持状态以便以后使用它。
任何人都知道如何:
- 运行 groovy 里面的脚本 java
- 保留状态以供进一步使用。
谢谢!
groovy.util.Eval
class 可能是在运行时动态执行 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
class,您可以将状态保存在一个变量中,稍后在您的程序中使用它。下面给出了一个例子:
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"));
}
}
我有一个已解析的 HTML 文件,其中包含一个带有 groovy 脚本的标记。 我在字符串中有 groovy 脚本,我必须在运行时执行它并保持状态以便以后使用它。
任何人都知道如何:
- 运行 groovy 里面的脚本 java
- 保留状态以供进一步使用。
谢谢!
groovy.util.Eval
class 可能是在运行时动态执行 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
class,您可以将状态保存在一个变量中,稍后在您的程序中使用它。下面给出了一个例子:
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"));
}
}