从java调用groovy

需要将groovy-2.4.3.jar加入到classpath中

一:在java中用GroovyClassLoader执行groovy代码

CalculateMax.groovy

1 class CalculateMax{
2     def Integer getMax(List values){
3         values.max();
4     }
5 }

UseGroovyClassLoader.java

 1 package groovy_java_1;
 2
 3 import java.io.File;
 4 import java.util.ArrayList;
 5
 6 import groovy.lang.GroovyClassLoader;
 7 import groovy.lang.GroovyObject;
 8
 9 public class UseGroovyClassLoader {
10     public static void main(String[] args){
11         GroovyClassLoader loader = new GroovyClassLoader();
12         try{
13             Class<?> groovyClass = loader.parseClass(new File("src/groovy_java_1/CalculateMax.groovy"));
14             GroovyObject groovyObject = (GroovyObject) groovyClass.newInstance();
15             ArrayList<Integer> numbers = new ArrayList<Integer>();
16             numbers.add(new Integer(1));
17             numbers.add(new Integer(10));
18             Object[] arguments = {numbers};
19             Object value = groovyObject.invokeMethod("getMax", arguments);
20             assert value.equals(new Integer(10));
21             System.out.println(value);
22         }catch(Exception e){
23             e.printStackTrace();
24         }
25     }
26
27 }

二:在java中用GroovyShell执行groovy代码

UseGroovyShell.java

 1 package groovy_java_0;
 2
 3 import java.math.BigDecimal;
 4
 5 import groovy.lang.Binding;
 6 import groovy.lang.GroovyShell;
 7
 8 public class UseGroovyShell {
 9     public static void main(String[] args){
10         Binding binding = new Binding();
11         binding.setVariable("x", 2.4);
12         binding.setVariable("y",8);
13         GroovyShell shell = new GroovyShell(binding);
14         Object value = shell.evaluate("x+y");
15         assert value.equals(new BigDecimal(10.4));
16     }
17
18 }

三:在java中用GroovyScriptEngine执行Groovy代码

Hello.groovy

1 def hellostatement = "hello ${name}"

UseGroovyScriptEngine.java

 1 package groovy_java_2;
 2
 3 import groovy.lang.Binding;
 4 import groovy.util.GroovyScriptEngine;
 5
 6 public class UseGroovyScriptEngine {
 7     public static void main(String[] args){
 8         try {
 9             String[] roots = new String[]{"src/groovy_java_2"};    //设置根目录
10             GroovyScriptEngine gse = new GroovyScriptEngine(roots);    //初始化引擎
11
12             Binding binding = new Binding();
13             binding.setVariable("name", "Gweneth");
14
15             Object output = gse.run("Hello.groovy", binding);
16             System.out.println(output);
17             assert output.equals("hello Gweneth");
18
19         } catch (Exception e) {
20             // TODO: handle exception
21             e.printStackTrace();
22         }
23     }
24
25 }

时间: 2024-11-05 11:25:53

从java调用groovy的相关文章

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

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

java调用groovy实例

1.maven引入groovy jar包 <dependency> <groupId>org.codehaus.groovy</groupId> <artifactId>groovy-all</artifactId> <version>2.1.9</version> </dependency> 2.调用 import groovy.lang.GroovyShell; public class TestGroov

Groovy学习笔记(二)—— 从Java到Groovy

之前就有说过,很多人之所以选择Groovy就是因为其学习成本低,只要你有Java的基础,学起来相当快.与此对比的是Scala(另一种JVM动态语言)语法就比较难学(虽然还没学过,但是网上的评论是这样的). 作为一个Java程序员,我要逐渐把自己Groovy. 从JDK到GDK 1.JDK作为Java开发的核心,是所有Java程序员都需要学习和使用的部分.Groovy在设计GDK的时候非常贴心贴心贴心(重要的感情抒发三遍),GDK可以认为是JDK的扩展和超集,很多Java API在GDK里你都可以

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包支持 ====================================

Java调用WebService 接口 实例

这里给大家介绍一下,Java调用webservice的一个实例的过程. 本项目不能运行,因为接口地址不可用. 这里只是给大家介绍一个过程,同时留作自己的笔记.如果要学习,可以参照别人的实例.比较好. ①选择项目根目录的src ,右键,new --> webservice client 然后输入地址: http://172.18.100.52:456/hello?wsdl 必须要加wsdl结尾,这样才是一个webservice的接口. finlish.这时候刷新项目.可以看到项目下/src/com

java 调用 keytool 生成keystore 和 cer 证书

keytool是一个Java数据证书的管理工具, keytool将密钥(key)和证书(certificates)存在一个称为keystore的文件中在keystore里, 包含两种数据: 密钥实体(Key entity)——密钥(secret key)又或者是私钥和配对公钥(采用非对称加密) 可信任的证书实体(trusted certificate entries)——只包含公钥 ailas(别名)每个keystore都关联这一个独一无二的alias,这个alias通常不区分大小写 下面给出一

java调用phantomjs采集ajax加载生成的网页

java调用phantomjs采集ajax加载生成的网页 日前有采集需求,当我把所有的对应页面的链接都拿到手,准备开始根据链接去采集(写爬虫爬取)对应的终端页的时候,发觉用程序获取到的数据根本没有对应的内容,可是我的浏览器看到的内容明明是有的,于是浏览器查看源代码也发觉没有,此时想起该网页应该是ajax加载的.不知道ajax的小朋友可以去学下web开发啦. 采集ajax生成的内容手段不外乎两种.一种是通过http观察加载页面时候的请求,然后我们模仿该请求去得到对应的内容,第二种则是模仿浏览器行为

Java调用Linux命令(cd的处理)

一.Java调用Linux系统的命令非常简单 这是一个非常常用的调用方法示例: 1 public String executeLinuxCmd(String cmd) { 2 System.out.println("got cmd job : " + cmd); 3 Runtime run = Runtime.getRuntime(); 4 try { 5 Process process = run.exec(cmd); 6 InputStream in = process.getIn

JAVA调用Shell脚本

在实际项目中,Java有时候需要调用C写出来的东西,除了JNI以外,我认为一种比较好的方法是JAVA调用Shell.先把C写出来的make成可执行文件,然后再写一个shell脚本执行该可执行文件,最后是JAVA调用该shell脚本. JAVA调用很简单,例子如下: 首先是shell脚本 [plain] view plain copy print? #!/bin/sh echo Begin word cluster /home/felven/word2vec/word2vec -train /ho