文章目录
- 一、Groovy 类中调用 Groovy 脚本
- 1、创建 GroovyShell 对象并执行 Groovy 脚本
- 2、代码示例
- 二、完整代码示例
- 1、调用者 Groovy 脚本的类
- 2、被调用者 Groovy 脚本
- 3、执行结果
一、Groovy 类中调用 Groovy 脚本
1、创建 GroovyShell 对象并执行 Groovy 脚本
首先 , 创建 GroovyShell 对象 , 在构造函数中 , 需要传入 Binding 对象 ;
代码语言:javascript复制def shell = new GroovyShell(getClass().getClassLoader(), binding)
然后 , 设置要调用的 Groovy 脚本对应的 File 文件对象 ;
代码语言:javascript复制def file = new File("Script.groovy")
最后 , 调用 GroovyShell 对象的 evaluate 方法 , 执行 Groovy 脚本 ;
代码语言:javascript复制shell.evaluate(file)
2、代码示例
代码示例 :
代码语言:javascript复制class Test {
void startScript() {
// 注意这里创建 groovy.lang.Binding
def binding = new Binding()
// 设置 args 参数到 Binding 中的 variable 成员中
binding.setVariable("args", ["arg0", "arg1"])
// 执行 Groovy 脚本
def shell = new GroovyShell(getClass().getClassLoader(), binding)
def file = new File("Script.groovy")
shell.evaluate(file)
}
}
new Test().startScript()
二、完整代码示例
1、调用者 Groovy 脚本的类
代码语言:javascript复制class Test {
void startScript() {
// 注意这里创建 groovy.lang.Binding
def binding = new Binding()
// 设置 args 参数到 Binding 中的 variable 成员中
binding.setVariable("args", ["arg0", "arg1"])
// 执行 Groovy 脚本
def shell = new GroovyShell(getClass().getClassLoader(), binding)
def file = new File("Script.groovy")
shell.evaluate(file)
}
}
new Test().startScript()
2、被调用者 Groovy 脚本
代码语言:javascript复制/*
下面的 age 和 age2 都是变量定义
age 变量的作用域是 本地作用域
age2 变量的作用域是 绑定作用域
一个是私有变量 , 一个是共有变量
*/
// 打印参数
println args
def age = "18"
age2 = "16"
// 打印绑定作用域变量
println binding.variables
println "$age , $age2"
/*
定义一个函数
在下面的函数中 , 可以使用 绑定作用域变量
不能使用 本地作用域变量
*/
void printAge() {
println "$age2"
//println "$age"
}
printAge()
3、执行结果
上面的两个 Groovy 脚本都在相同目录 ;
代码语言:javascript复制[arg0, arg1]
[args:[arg0, arg1], age2:16]
18 , 16
16