文章目录
- 一、报错信息
- 二、解决方案
一、报错信息
在 Java 类中 , 调用 Groovy 脚本 , 出现如下错误 ;
代码语言:javascript复制java.io.FileNotFoundException: Y: 02_WorkSpace 03_IDEAGroovy_DemoScript.groovy (Y: 02_WorkSpace 03_IDEAGroovy_DemoScript.groovy)
at groovy.lang.GroovyCodeSource.<init>(GroovyCodeSource.java:108)
at groovy.lang.GroovyShell.evaluate(GroovyShell.java:470)
at JavaClass.startScript(JavaClass.java:17)
at JavaClass.main(JavaClass.java:22)
二、解决方案
Groovy_Demo 是工程根目录名称 ;
这个错误本身很简单 , 但是涉及到 Java 与 Groovy 的路径查找机制的不同 ;
Java 类 JavaClass 位于 Groovy_Demosrcmaingroovy 目录下 , 要在该 Java 类中调用同目录的 Script.groovy 脚本 ;
此处必须使用完整的路径 “src/main/groovy/Script.groovy” , 才能查找到 “Script.groovy” 脚本 ;
Java 类中调用 Groovy 脚本 , 需要使用 “src/main/groovy/Script.groovy” 路径 ;
代码语言:javascript复制import groovy.lang.Binding;
import groovy.lang.GroovyShell;
import java.io.File;
import java.io.IOException;
public class JavaClass {
public void startScript() throws IOException {
// 注意这里创建 groovy.lang.Binding
Binding binding = new Binding();
// 设置 args 参数到 Binding 中的 variable 成员中
binding.setVariable("args", new String[]{"arg0", "arg1"});
// 执行 Groovy 脚本
GroovyShell shell = new GroovyShell(JavaClass.class.getClassLoader(), binding);
File file = new File("src/main/groovy/Script.groovy");
shell.evaluate(file);
}
public static void main(String[] args) {
try {
new JavaClass().startScript();
} catch (IOException e) {
e.printStackTrace();
}
}
}
而在 Groovy 脚本中调用 另外一个 Groovy 脚本 , 如果两个 Groovy 脚本在同一个目录中 , 可以直接使用相对路径 " Script.groovy " 进行调用即可 ;
参考 【Groovy】Groovy 脚本调用 ( Groovy 脚本中调用另外一个 Groovy 脚本 | 绑定作用域 binding 变量分析 | Binding 类 variables 成员分析 ) 博客的源码 ;