java中调用groovy
Groovy在Java中的应用,做几个小例子以备查
package com.boco.efficiency.groovy;
import groovy.lang.Binding;
import groovy.lang.GroovyClassLoader;
import groovy.lang.GroovyObject;
import groovy.lang.GroovyShell;
import groovy.text.SimpleTemplateEngine;
import groovy.text.Template;
import groovy.util.GroovyScriptEngine;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import org.apache.log4j.Logger;
import org.codehaus.groovy.control.CompilationFailedException; public class groovyUsage {
private static final Logger logger = Logger.getLogger(groovyUsage.class);
/*
* UseClassLoader usage example
* Use groovy UseClassLoader to parse/compile a groovy file and run it
* */
public void UseClassLoader() throws Exception {
ClassLoader parent = getClass().getClassLoader();
GroovyClassLoader loader = new GroovyClassLoader(parent);
Class groovyClass = loader.parseClass(new File("D:\\StudyCode\\checkGroovy\\src\\main\\java\\com\\boco\\common\\HelloWorld.groovy"));
GroovyObject groovyObject = (GroovyObject) groovyClass.newInstance();
Object[] args = {};
groovyObject.invokeMethod("sayHello", args);
} /*
* GroovyShell usage example
* Use groovy shell to calculate dynamically
注意其中的groovyShell.evalucate会比较好用
* */
public void UseGroovyShell() {
Binding binding = new Binding();
binding.setVariable("foo", new Integer(30));
GroovyShell shell = new GroovyShell(binding);
Object value = shell.evaluate("println 'Hello World! I\\'m in shell'; x = 123; return foo * 10");
logger.info("result: " + value);
assert value.equals(new Integer(20));
} /*
* GroovyScriptEngine usage example
* GroovyScriptEngine是实际场景中应用最多的,其构造参数中需要加入urls指明groovy应用路径
* */
public void useGroovyScriptEngine() throws Exception {
String[] roots = new String[] { "/StudyCode/checkGroovy/src/main/java/com/boco/common/" };
GroovyScriptEngine gse = new GroovyScriptEngine(roots);
Binding binding = new Binding();
binding.setVariable("input", "world");
gse.run("hello.groovy", binding);
logger.info(binding.getVariable("output"));
} /*
* Use groovy.Text.Template to gen new String
这在动态生成某些文本文件或script时会有大用处^^
* */
public void useGroovyTextTemplate() throws Exception {
File file=new File("D:\\StudyCode\\checkGroovy\\src\\main\\java\\com\\boco\\common\\template.tmpl");
Template tmpl =null;
try {
tmpl = new SimpleTemplateEngine().createTemplate(file);
} catch (CompilationFailedException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} Map binding = new HashMap();
binding.put("id", "101");
binding.put("name", "101");
binding.put("salary", "50000");
String xml = tmpl.make(binding).toString();
logger.info(xml);
}
}
配置文件信息
D:\StudyCode\checkGroovy\src\main\java\com\haha\common>cat hello.groovy
output = "Hello, ${input}!"
D:\StudyCode\checkGroovy\src\main\java\com\haha\common>cat HelloWorld.groovy
class HelloWorld {
public void sayHello() {
System.out.println("hello world from HelloWorld.groovy");
}
}
D:\StudyCode\checkGroovy\src\main\java\com\haha\common>cat check.groovy
import com.haha.common.alarmObj;
public class check {
public void localHandle(alarmObj src,alarmObj dest) {
long newfp3=src.getFp0()+src.getFp1()+src.getFp2();
System.out.println("call in groovy: " + newfp3);
}
}
D:\StudyCode\checkGroovy\src\main\java\com\haha\common>cat template.tmpl
<WholeMsg MsgMark='1231' Priority='' FieldNum=''>
<person>
<id>${id}</id>
<name>${name}</name>
<salary>${salary}</salary>
</person>
</WholeMsg>
调用各用例
package com.boco.efficiency.groovy; import java.io.File;
public class groovyCheck {
/**
* @param args
*/
public static void main(String[] args) throws Exception{
groovyUsage groovyExample = new groovyUsage();
groovyExample.UseGroovyShell();
groovyExample.UseClassLoader();
groovyExample.useGroovyScriptEngine();
groovyExample.useGroovyTextTemplate();
}
}
最终输出
Hello World! I'm in shell
[2013-11-05 17:03:47,432] INFO [com.boco.efficiency.groovy.groovyUsage] - [result: 300]
hello world from HelloWorld.groovy
[2013-11-05 17:03:47,488] INFO [com.boco.efficiency.groovy.groovyUsage] - [Hello, world!]
[2013-11-05 17:03:47,506] INFO [com.boco.efficiency.groovy.groovyUsage] - [<WholeMsg MsgMark='1231' Priority='' FieldNum=''>
<person>
<id>101</id>
<name>101</name>
<salary>50000</salary>
</person>
</WholeMsg>]
参考文档
http://ivan.iteye.com/blog/373237
http://groovy.codehaus.org/Embedding+Groovy
java中调用groovy的更多相关文章
- 23 在java中使用groovy类
1 在java中使用groovy类 1.1 直接调用groovy类 在java中调用Groovy类,需要增加Groovy运行时到java的classpath中. pom.xml < ...
- Java中调用c/c++语言出现Exception in thread "main" java.lang.UnsatisfiedLinkError: Test.testPrint(Ljava/lang/String;)V...错误
错误: Exception in thread "main" java.lang.UnsatisfiedLinkError: Test.testPrint(Ljava/lang/S ...
- java中调用dll文件的两种方法
一中是用JNA方法,另外是用JNative方法,两种都是转载来的, JNA地址:http://blog.csdn.net/shendl/article/details/3589676 JNativ ...
- java中调用js脚本
JDK1.6加入了对Script(JSR223)的支持.这是一个脚本框架,提供了让脚本语言来访问Java内部的方法.你可以在运行的时候找到脚本引擎,然后调用这个引擎去执行脚本.这个脚本API允许你为脚 ...
- autoit 处理文件上传弹出框,并在JAVA中调用
Java 代码 //定义exe 文件存放的绝对路径 File file2 = new File("."); String command = file2.getCanonical ...
- 如何在Java中调用Python代码
有时候,我们会碰到这样的问题:与A同学合作写代码,A同学只会写Python,而不会Java, 而你只会写Java并不擅长Python,并且发现难以用Java来重写对方的代码,这时,就不得不想方设法“调 ...
- 在Java中调用Python
写在前面 在微服务架构大行其道的今天,对于将程序进行嵌套调用的做法其实并不可取,甚至显得有些愚蠢.当然,之所以要面对这个问题,或许是因为一些历史原因,或者仅仅是为了简单.恰好我在项目中就遇到了这个问题 ...
- JAVA中调用LevelDB用于Linux和Window环境下快速存储KV结构
一.简介 JAVA中调用LevelDB用于Linux和Window环境下快速存储KV结构 二.依赖 <!-- https://mvnrepository.com/artifact/org.fus ...
- java中调用kettle转换文件
java中调用kettle转换文件 通过命令行也能够调用,然后java中调用命令行代码也能够.这样没有和java代码逻辑无缝集成.本文说明kettle5.1中假设通过其它API和java代码无缝集成: ...
随机推荐
- (通用)Android App代码混淆终极解决方案【转】
App虽然没有那么的高大上,但是代码的混淆是代表了程序员对App的责任心, 也是对App安全的一点点保证.今天我会将自己做Android混淆的过程和体会分享给大家,也避免大家少走弯路,少跳坑. 本篇博 ...
- Html5學習重點清單
SVG webSQL 數據庫 SSE 服務推送 MathML 基於xml語法 Web 存储 webSockets通信 canvas 畫布操作 音頻和視頻 地理位置 Geolocation API We ...
- [转]浅谈Android五大布局(一)——LinearLayout、FrameLayout和AbsoulteLayout
Android的界面是有布局和组件协同完成的,布局好比是建筑里的框架,而组件则相当于建筑里的砖瓦.组件按照布局的要求依次排列,就组成了用户所看见的界面.Android的五大布局分别是LinearLay ...
- 在Unity场景中控制日夜的轮转
一.介绍 目的:通过在Unity场景中添加C#脚本完成日夜轮转的效果. 软件环境:Unity 2017.3.0f3,VS2013 二.操作过程 通过拖拽场景中的Directional Light我们知 ...
- svn -- svn配置自动启动
配置自动启动服务 1.添加到系统服务 sc create SVNService binpath= “D:\subversion\bin\svnserve.exe --service -r D:/sv ...
- ggplot2 提取stat计算出来的数据
使用ggplot2 绘图时,我们只需要提供原始数据就可以了,ggplot2 内置了许多的计算函数,来帮助我们计算对应的数值. 最典型的的,当使用geom_boxplot 绘制箱线图时,我们只提供原始数 ...
- XAMPP permissions on Mac OS X
$ cd /Applications $ XAMPP/ 注意: 改变的是XAMPP目录,而不是htdocs ref: http://stackoverflow.com/questions/904697 ...
- ecshop You don't have permission to access / on this server
回复 6# 晓天 确实是这个短标签的事情,谢谢了啊. 第一种方法:替换程序里的内容,以后就省心了. 针对所有的php脚本 在DW里面运行查找替换l 主要做替换操作 当然是短标签替换为整标签 注意顺序 ...
- Java常量池的理解
1.常量池的好处常量池是为了避免频繁的创建和销毁对象而影响系统性能,其实现了对象的共享.例如字符串常量池,在编译阶段就把所有的字符串文字放到一个常量池中.(1)节省内存空间:常量池中所有相同的字符串常 ...
- 单用户模式&救援模式&克隆虚拟机&Linux机器相互登录
1.13 单用户模式 1.14 救援模式 1.15 克隆虚拟机 1.16 Linux机器相互登录 1.单用户模式 关机:init 0 .poweroff 重启:init 6 .reboot 关机:in ...