当前位置:网站首页>【错误记录】Groovy工程中的文件查找策略 ( main 函数中需要使用 src/main/groovy/Script.groovy | Groovy 脚本直接使用代码相对路径 )

【错误记录】Groovy工程中的文件查找策略 ( main 函数中需要使用 src/main/groovy/Script.groovy | Groovy 脚本直接使用代码相对路径 )

2022-04-21 14:00:00 韩曙亮_



文章目录






一、报错信息



在 Java 类中 , 调用 Groovy 脚本 , 出现如下错误 ;

      
      
java. io. FileNotFoundException: Y: \002_WorkSpace \003_IDEA \Groovy_Demo \Script. groovy ( Y: \002_WorkSpace \003_IDEA \Groovy_Demo \Script. 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)
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

【错误记录】Groovy工程中的文件查找策略 ( main 函数中需要使用 src/main/groovy/Script.groovy | Groovy 脚本直接使用代码相对路径 )_java






二、解决方案



Groovy_Demo 是工程根目录名称 ;

这个错误本身很简单 , 但是涉及到 Java 与 Groovy 的路径查找机制的不同 ;

Java 类 JavaClass 位于 Groovy_Demo\src\main\groovy 目录下 , 要在该 Java 类中调用同目录的 Script.groovy 脚本 ;

此处必须使用完整的路径 “src/main/groovy/Script.groovy” , 才能查找到 “Script.groovy” 脚本 ;



Java 类中调用 Groovy 脚本 , 需要使用 “src/main/groovy/Script.groovy” 路径 ;

      
      
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();
}
}
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.

而在 Groovy 脚本中调用 另外一个 Groovy 脚本 , 如果两个 Groovy 脚本在同一个目录中 , 可以直接使用相对路径 " Script.groovy " 进行调用即可 ;

参考 【Groovy】Groovy 脚本调用 ( Groovy 脚本中调用另外一个 Groovy 脚本 | 绑定作用域 binding 变量分析 | Binding 类 variables 成员分析 ) 博客的源码 ;



版权声明
本文为[韩曙亮_]所创,转载请带上原文链接,感谢
https://blog.51cto.com/u_14202100/5237115