JAVA与groovy脚本的结合使用

java执行groovy shell脚本

<dependency>

<groupId>org.codehaus.groovy</groupId>

<artifactId>groovy-all</artifactId>

<version>2.4.0-beta-1</version>

</dependency>

添加groovy jar包支持

====================================================


package groovy;

import groovy.lang.Binding;

import groovy.lang.GroovyShell;

public class Java2GroovyShell {

public static void main(String[] args) {

// TODO Auto-generated method stub

Binding binding = new Binding();

binding.setVariable("var", 5);

GroovyShell gs = new GroovyShell(binding);

Object value = gs.evaluate("println ‘Hello Groovy !‘;abc=123;return var*10");//执行groovyshell脚本

System.out.println(value.equals(50));

System.out.println(binding.getVariable("abc").equals(123));

}

}

====================================================直接运行groovy的脚本

++++++++++++++++++++++++++++++++++++++++++++++++++++JAVA中动态运行groovy脚本

通过JAVA来加载如一个groovy脚本文件,然后调用该脚本中的方法


package groovy;

import groovy.lang.GroovyClassLoader;

import groovy.lang.GroovyObject;

import java.io.File;

public class Java2GroovyDynamic {

public static void main(String[] args) throws Exception {

// TODO Auto-generated method stub

ClassLoader parent = ClassLoader.getSystemClassLoader();

GroovyClassLoader loader = new GroovyClassLoader(parent);

Class groovyClass = loader.parseClass(new File("C:\\normandy_workspace\\groovy\\src\\groovy\\GroovyDemo.groovy"));

GroovyObject groovyObject = (GroovyObject)groovyClass.newInstance();

Object[] param = {123,321};

int res = (int) groovyObject.invokeMethod("add", param);

System.out.println("res="+res);

}

}

groovy脚本


package groovy

class GroovyDemo {

static int add(int x,int y) {

return x+y;

}

static main(args) {

int z = add(123,321);

println("x+y="+z);

}

}

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Groovy脚本引擎

通过设定CLASSPATH来初始化groovy脚本引擎,可以运行该path下的任何groovy脚本文件了


package groovy;

import groovy.lang.Binding;

import groovy.util.GroovyScriptEngine;

public class Java2GroovyEngine {

public static void main(String[] args) throws Exception {

// TODO Auto-generated method stub

String path = "C:\\normandy_workspace\\groovy\\src\\groovy\\";

GroovyScriptEngine gse = new GroovyScriptEngine(path);

Binding binding = new Binding();

binding.setVariable("input", "Groovy");

gse.run("Test.groovy", binding);

System.out.println(binding.getVariable("output"));

}

}

groovy脚本


package groovy;

output = "Hello ${input}";

时间: 2024-08-29 11:18:13

JAVA与groovy脚本的结合使用的相关文章

Java执行groovy脚本

1 Binding binding = new Binding(); 2 binding.setVariable("foo", new Integer(2)); 3 GroovyShell shell = new GroovyShell(binding); 4 5 String script = "import com.myb.to.infrastructure.Md5Util; " 6 + "def a = 12; println 'C# md5:' +

【java web】java执行预编译Groovy脚本

在JVM中运行Groovy类有两种方式: 使用Groovy编译所有的*.groovy为java的*.class文件,把这些*.class文件放在java类路径中,通过java类加载器来加载这些类. 通过groovy类加载器在运行时直接加载*.groovy文件并生成对象.在这种方式下,没有生成任何*.class,但是生成了一个java.lang.Class对象的实例. 下面介绍前一种使用Groovy的方法:编译成java字节码并且作为正常java应用程序运行在java虚拟机上,即预编译模式. 1.

JAVA嵌入运行Groovy脚本

一.GroovyShell代码样例 1) 简单的表达式执行,方法调用 /**  * 简答脚本执行  * @throws Exception  */ public static void evalScriptText() throws Exception{ //groovy.lang.Binding Binding binding = new Binding(); GroovyShell shell = new GroovyShell(binding); binding.setVariable("

工作随笔——Java调用Groovy类的方法、传递参数和获取返回值

接触Groovy也快一年了,一直在尝试怎么将Groovy引用到日常工作中来.最近在做一个功能的时候,花了点时间重新看了下Java怎么调用Groovy的方法.传递参数和获取返回值. 示例Groovy代码如下: # TestGroovy.groovy 定义testC方法,传入3个参数,返回处理后的数据 def testC(int numA, int numB, int numC) { "传入参数:" + numA + numB + numC + "计算之和为:" + (

ElasticSearch Groovy脚本远程代码执行漏洞

什么是ElasticSearch? 它是一种分布式的.实时性的.由JAVA开发的搜索和分析引擎. 2014年,曾经被曝出过一个远程代码执行漏洞(CVE-2014-3120),漏洞出现在脚本查询模块,由于搜索引擎支持使用脚本代码(MVEL),作为表达式进行数据操作,攻击者可以通过MVEL构造执行任意java代码,后来脚本语言引擎换成了Groovy,并且加入了沙盒进行控制,危险的代码会被拦截,结果这次由于沙盒限制的不严格,导致远程代码执行任意命令..."任意"你懂的,比如:利用nc反弹sh

Scripting Java(一):Java中执行脚本

Many implementations of scripting and dynamically typed languages generate Java bytecodes so that programs can be run on the Java Platform, just as are actual Java programs. Implementing a language in this way (or as a Java interpreter class for the

groovy脚本导致的FullGC问题

这个是由一个线上问题导致的: 背景: 应用中内嵌了groovy引擎,会动态执行传入的表达式并返回执行结果 线上问题: 发现机器的fullGC从某个时候开始暴涨,并且一直持续: 登到机器上,用jstat -gcutil 命令观察,发现perm区一直是100%,fullGC无法回收: 将这台机器的内存dump出来进行分析: 在类视图中,发现大量的groovy.lang.GroovyClassLoader$InnerLoader; 在类加载器视图里面也看到大量的groovy的InnerLoader:

SoapUI 引用第三方jar包和引用Groovy脚本

SoapUI仅支持JavaScript脚本和Groovy脚本,我们项目中要引用第三方jar包,那么如何操作呢?  百度上关于SoapUI引用第三方jar包的资料实在太少了. 下面是详细的介绍: 一.首先是jar包的代码以及生成jar包的名称: package是com.test.demo import java.util.*; public class DemoJAR { public String outp() { return "This is a demo!"; } public

即时编译和打包您的 Groovy 脚本(转)

在本文中将会涉及到: 使用 CliBuilder 来实现对命令行选项的支持,脚本执行时所需要的参数将通过命令行选项的方式传递. 使用 GroovyClassLoader 加载 Groovy class. 使用 AntBuilder 来构建 Jar 包. 开始之前 关于本文 也许您写了一些有趣或实用的 Groovy 脚本并希望与您的朋友分享,可是您并不想强迫他们安装 Groovy,所以您也许想要做一个小工具让您的朋友们能够用它编译您的 Groovy 脚本并且生成一个可执行的 Jar 包.本文将介绍